diff options
author | Nikolaus Schulz <microschulz@web.de> | 2010-07-30 19:13:14 +0200 |
---|---|---|
committer | Nikolaus Schulz <microschulz@web.de> | 2010-07-30 19:15:21 +0200 |
commit | f22fe4decd9a70a2eb826ecdd14f9d1bb3b4e394 (patch) | |
tree | f2d3353d1764877ea9eb936c6e99977d09560f70 | |
parent | d99b4b4414e90240524ceca6bb3ccd1ffa7fbbec (diff) | |
download | archivemail-f22fe4decd9a70a2eb826ecdd14f9d1bb3b4e394.tar.gz archivemail-f22fe4decd9a70a2eb826ecdd14f9d1bb3b4e394.tar.bz2 archivemail-f22fe4decd9a70a2eb826ecdd14f9d1bb3b4e394.zip |
Detect and never archive IMAP server pseudo mbox messages
IMAP servers (Dovecot and UW-IMAP at least) may store mailbox meta data for
mboxes in a pseudo message. Such messages are now detected and never archived.
This commit includes a test case in the test suite.
-rw-r--r-- | CHANGELOG | 3 | ||||
-rwxr-xr-x | archivemail | 6 | ||||
-rwxr-xr-x | test_archivemail | 22 |
3 files changed, 31 insertions, 0 deletions
@@ -51,6 +51,9 @@ Version 0.8.0 - UNRELEASED boolean constants). * Added a lot of test cases for maildir archiving to the test suite. Maildir testing should now be roughly on par with mbox testing. + * IMAP servers (Dovecot and UW-IMAP at least) may store mailbox meta data + for mboxes in a pseudo message. Such messages are now detected and never + archived. Obsoletes: patch #2210707. (Thanks, "tlhackque") Version 0.7.2 - 9 November 2007 diff --git a/archivemail b/archivemail index ec05171..52ec06b 100755 --- a/archivemail +++ b/archivemail @@ -1156,6 +1156,12 @@ def _archive_mbox(mailbox_name, final_archive_name): msg = original.next() if not msg and (original.starting_size > 0): user_error("'%s' is not a valid mbox-format mailbox" % mailbox_name) + if msg and 'X-IMAP' in msg: + # Dovecot and UW-IMAP pseudo message for mailbox meta data + vprint("detected IMAP pseudo message") + if retain: + retain.write(msg) + msg = original.next() while (msg): msg_size = sizeof_message(msg) stats.another_message(msg_size) diff --git a/test_archivemail b/test_archivemail index 2d63d78..fda2d63 100755 --- a/test_archivemail +++ b/test_archivemail @@ -1103,6 +1103,28 @@ class TestArchiveSize(unittest.TestCase): archivemail.options.min_size = None +class TestXIMAPMessage(TestArchive): + """Test if IMAP pseudo messages in mboxes are properly handled.""" + def setUp(self): + super(TestXIMAPMessage, self).setUp() + archivemail.options.quiet = True + + def testXIMAPMbox(self): + """IMAP pseudo messages in an mbox are always preserved.""" + self.good_mbox = make_mbox(hours_old=181*24, headers={'X-IMAP': 'dummytext'}, + messages=1) + self.good_archive = make_mbox(hours_old=181*24, messages=3) + self.mbox = tempfile.mkstemp()[-1] + shutil.copyfile(self.good_mbox, self.mbox) + append_file(self.good_archive, self.mbox) + archivemail.archive(self.mbox) + self.verify() + + def tearDown(self): + super(TestXIMAPMessage, self).tearDown() + archivemail.options.quiet = False + + ############# Test archiving maildirs ############### class TestArchiveMailboxdir(TestCaseInTempdir): |