From 1e130ca70a3822217fedd35cb92f01f36d487a23 Mon Sep 17 00:00:00 2001 From: Sean Whalen Date: Tue, 21 Aug 2018 11:57:06 -0400 Subject: [PATCH] 3.7.4 - Fix dovecot IMAP server support (closes #5) Use `.` instead of `/` as the IMAP folder hierarchy separator https://stackoverflow.com/questions/51951887/what-is-the-proper-way-to-create-imap-subfolders-using-imapclient-for-python/51952493#51952493 --- CHANGELOG.md | 6 +++--- parsedmarc/__init__.py | 8 ++++---- parsedmarc/cli.py | 11 ++--------- 3 files changed, 9 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bfe0c66..f360b65 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,9 @@ 3.7.4 ----- -- Workaround older versions of the dovecot mail server not reporting existing -folders correctly (#5) -' +- Use `.` instead of `/` as the IMAP folder hierarchy separator - fixes +dovecot support (#5) + 3.7.3 ----- diff --git a/parsedmarc/__init__.py b/parsedmarc/__init__.py index 8b12fcf..6904580 100644 --- a/parsedmarc/__init__.py +++ b/parsedmarc/__init__.py @@ -1003,7 +1003,7 @@ def parse_report_email(input_, nameservers=None, timeout=6.0): timeout=timeout) result = OrderedDict([("report_type", "aggregate"), ("report", aggregate_report)]) - except (TypeError, binascii.Error): + except (TypeError, ValueError, binascii.Error): pass if result is None: @@ -1087,19 +1087,19 @@ def get_dmarc_reports_from_inbox(host, user, password, forensic_reports = [] aggregate_report_msg_uids = [] forensic_report_msg_uids = [] - aggregate_reports_folder = "{0}/Aggregate".format(archive_folder) - forensic_reports_folder = "{0}/Forensic".format(archive_folder) + aggregate_reports_folder = "{0}.Aggregate".format(archive_folder) + forensic_reports_folder = "{0}.Forensic".format(archive_folder) try: server = imapclient.IMAPClient(host, use_uid=True) server.login(user, password) - server.select_folder(reports_folder) if not server.folder_exists(archive_folder): server.create_folder(archive_folder) if not server.folder_exists(aggregate_reports_folder): server.create_folder(aggregate_reports_folder) if not server.folder_exists(forensic_reports_folder): server.create_folder(forensic_reports_folder) + server.select_folder(reports_folder) messages = server.search() for message_uid in messages: raw_msg = server.fetch(message_uid, diff --git a/parsedmarc/cli.py b/parsedmarc/cli.py index d6dc459..831d13a 100644 --- a/parsedmarc/cli.py +++ b/parsedmarc/cli.py @@ -175,15 +175,8 @@ def _main(): forensic_reports += reports["forensic_reports"] except IMAPError as error: - error = error.__str__() - if "ALREADYEXISTS" in error: - # Workaround for old versions of the dovecot mail server - # that do not respond correctly when we tested for an existing - # folder - pass - else: - logger.error("IMAP Error: {0}".format(error)) - exit(1) + logger.error("IMAP Error: {0}".format(error.__str__())) + exit(1) results = OrderedDict([("aggregate_reports", aggregate_reports), ("forensic_reports", forensic_reports)])