fix race when receiving mail during rule process
[imapami.git] / imapami / rules.py
index 9efd6dd..3adff91 100644 (file)
@@ -156,12 +156,6 @@ class ImapamiRule(object):
         :returns:
           A list of IMAP items
         """
-        # select the input mailbox
-        if self.inbox is not None:
-            ami.imap.select(self.inbox)
-        else:
-            ami.imap.select(inbox)
-
         # search messages matching conditions
         criteria = "(%s)" % self.get_criteria(ami)
         ami.logger.debug("processing rule %s, inbox %s, imap criteria %s",
@@ -173,6 +167,7 @@ class ImapamiRule(object):
             return
 
         item_list = items[0].split()
+        item_list = [i for i in item_list if int(i) < ami.uidnext[inbox]]
         ami.logger.debug("matching mails returned by server: %s", item_list)
         return item_list
 
@@ -202,15 +197,19 @@ class ImapamiRule(object):
         ami.logger.debug('get imap parts = %s', parts_str)
         return parts_str, parts
 
-    def process(self, ami, inbox):
+    def process(self, ami):
         """
         Process the rule.
 
         :arg Imapami ami:
           The Imapami object
-        :arg string inbox:
-          The default input mailbox directory.
         """
+        if self.inbox is not None:
+            inbox = self.inbox
+        else:
+            inbox = ami.config["inbox"]
+        ami.imap.select(inbox)
+
         # get the list of items (mails) matching the condition criteria
         item_list = self._search(ami, inbox)
         # determine what parts should be fetched