Add mmassive e-mail update for performance by using message set STORE command
[imap-mark-seen] / imap_mark_seen.py
index caae2e2..eb79123 100644 (file)
@@ -26,6 +26,7 @@ def main():
 
     # prepare simple mail iterator and iterate throug mailboxes
     session = MailIterator(args.server, args.user, psw)
+    total_messages = 0
     for mailbox in session:
         if args.folder != "all folders" and ("INBOX/" + args.folder) not in mailbox[2]:
             continue
@@ -34,16 +35,16 @@ def main():
         except UserWarning as ex:
             logging.error(ex)
             continue
-        for mid in mail_ids:
-            logging.debug("Setting message %s from mailbox %s as seen",
-                            mid.decode('iso-8859-1'), mailbox[2])
-            try:
-                session.set_message_seen(mid.decode('iso-8859-1'))
-            except UserWarning as ex:
-                logging.error(ex)
-                continue
-
-    logging.info("Finished marking messages as seen. Exiting with code %s.", warnings_handler.detected_problems)
+        try:
+            if len(mail_ids) > 0:
+                mail_id_range = min(mail_ids, key=int).decode('iso-8859-1') + ':' + max(mail_ids, key=int).decode('iso-8859-1')
+                session.set_seen_messages(mail_id_range)
+                total_messages += len(mail_ids)
+        except UserWarning as ex:
+            logging.error(ex)
+
+    logging.info("Finished marking %s messages as seen", total_messages)
+    logging.info("Exiting with code %s", warnings_handler.detected_problems)
     return int(warnings_handler.detected_problems > 0)
 
 def configure_args():