aboutsummaryrefslogtreecommitdiffstats
path: root/archivemail.py
diff options
context:
space:
mode:
authorPeter Poeml <poeml@suse.de>2006-06-18 11:36:57 +0000
committerPeter Poeml <poeml@suse.de>2006-06-18 11:36:57 +0000
commitadfb7a63d7ba05152d630fb1a505b95dcde38038 (patch)
tree574e2a8565e217cdfe742851b7a3d1401e8ed24a /archivemail.py
parent07aca153f6187ae17028075a87b32e2f38d560d2 (diff)
downloadarchivemail-adfb7a63d7ba05152d630fb1a505b95dcde38038.tar.gz
archivemail-adfb7a63d7ba05152d630fb1a505b95dcde38038.tar.bz2
archivemail-adfb7a63d7ba05152d630fb1a505b95dcde38038.zip
don't delete more than a certain number of messages at a time. The max command len is limited. Fixes bug 942403 (Archiving large IMAP folders fails)
Diffstat (limited to 'archivemail.py')
-rwxr-xr-xarchivemail.py11
1 files changed, 8 insertions, 3 deletions
diff --git a/archivemail.py b/archivemail.py
index cee8a9f..3d42b86 100755
--- a/archivemail.py
+++ b/archivemail.py
@@ -1279,9 +1279,14 @@ def _archive_imap(mailbox_name, final_archive_name):
if archive:
archive.close()
archive.finalise()
- vprint("Deleting messages")
- imap_srv.store(string.join(message_list, ','),
- '+FLAGS.SILENT', '\\Deleted')
+ # do not delete more than a certain number of messages at a time, because the
+ # command length is limited. This avoids that servers terminate the connection with
+ # EOF or TCP RST.
+ vprint("Deleting %s messages" % len(message_list))
+ max_delete = 100
+ for i in range(0, len(message_list), max_delete):
+ imap_srv.store(string.join(message_list[i:i+max_delete], ','),
+ '+FLAGS.SILENT', '\\Deleted')
imap_srv.close()
imap_srv.logout()