use uids to manipulate mails
[imapami.git] / imapami / actions.py
index 7525133..8653ea0 100644 (file)
@@ -170,7 +170,7 @@ class ImapamiActionCopy(ImapamiAction):
         imap = ami.imap
         dest = self.evaluate(self.dest, ami, mail.msg)
         imap.create(dest)
-        ret, msg = imap.copy(mail.item, dest)
+        ret, msg = imap.uid("COPY", mail.item, dest)
         if ret != "OK":
             ami.logger.warning(
                 "imap copy returned %s: %s" % (ret, str(msg)))
@@ -205,7 +205,7 @@ class ImapamiActionChangeFlag(ImapamiAction):
             cmd = '-FLAGS'
         flag = '\\' + self.evaluate(self.flag, ami,
                                     mail.msg)
-        ret, msg = imap.store(mail.item, cmd, flag)
+        ret, msg = imap.uid("STORE", mail.item, cmd, flag)
         if ret != "OK":
             ami.logger.warning(
                 "imap store '%s %s' returned %s: %s" % (
@@ -273,13 +273,18 @@ class ImapamiActionMove(ImapamiAction):
         ImapamiAction.__init__(self, terminal=True)
         self.dest = dest
     def process(self, ami, mail):
-        ret = ImapamiActionCopy.process(
-            self, ami, mail)
-        if ret == False:
+        imap = ami.imap
+        dest = self.evaluate(self.dest, ami, mail.msg)
+        imap.create(dest)
+        ret, msg = imap.uid("COPY", mail.item, dest)
+        if ret != "OK":
+            ami.logger.warning(
+                "imap copy returned %s: %s" % (ret, str(msg)))
             return False
-        ret = ImapamiActionDelete.process(
-            self, ami, mail)
-        if ret == False:
+        ret, msg = imap.uid("STORE", mail.item, '+FLAGS', '\\Deleted')
+        if ret != "OK":
+            ami.logger.warning(
+                "imap delete returned %s: %s" % (ret, str(msg)))
             return False
         return True
 register(ImapamiActionMove)