diff --git a/CHANGELOG.md b/CHANGELOG.md index 8579ecd..9ecba37 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +3.9.6 +----- + +- Finish incomplete broken pipe fix + 3.9.5 ----- diff --git a/parsedmarc/__init__.py b/parsedmarc/__init__.py index bbad860..21110f8 100644 --- a/parsedmarc/__init__.py +++ b/parsedmarc/__init__.py @@ -1481,9 +1481,8 @@ def watch_inbox(host, username, password, callback, reports_folder="INBOX", server.login(username, password) imap_capabilities = get_imap_capabilities(server) if "IDLE" not in imap_capabilities: - logger.error("Cannot watch inbox: IMAP server does not support " - "the IDLE command") - exit(1) + raise IMAPError("Cannot watch inbox: IMAP server does not support " + "the IDLE command") ms = "MOVE" in imap_capabilities server.select_folder(rf) @@ -1562,13 +1561,21 @@ def watch_inbox(host, username, password, callback, reports_folder="INBOX", except ssl.CertificateError as error: raise IMAPError("Certificate error: {0}".format(error.__str__())) except BrokenPipeError: - raise IMAPError("Broken pipe") + logger.debug("IMAP error: Broken pipe") + logger.debug("Reconnecting watcher") + watch_inbox(host, username, password, callback, + reports_folder=reports_folder, + archive_folder=archive_folder, + delete=delete, + test=test, + wait=wait, + nameservers=nameservers, + dns_timeout=dns_timeout) except KeyboardInterrupt: break try: server.idle_done() - logger.info("IMAP: Sending DONE") server.logout() except BrokenPipeError: pass diff --git a/setup.py b/setup.py index 05a6928..bc6fdba 100644 --- a/setup.py +++ b/setup.py @@ -14,7 +14,7 @@ from setuptools import setup from codecs import open from os import path -__version__ = "3.9.5" +__version__ = "3.9.6" description = "A Python package and CLI for parsing aggregate and " \ "forensic DMARC reports"