diff --git a/offlineimap/folder/Base.py b/offlineimap/folder/Base.py index 608d361..0d5ddae 100644 --- a/offlineimap/folder/Base.py +++ b/offlineimap/folder/Base.py @@ -264,6 +264,14 @@ class BaseFolder(object): uid = newuid # Save uploaded status in the statusfolder statusfolder.savemessage(uid, message, flags, rtime) + elif newuid == 0: + # Message was stored to dstfolder, but we can't find it's UID + # This means we can't link current message to the one created + # in IMAP. So we just delete local message and on next run + # we'll sync it back + # XXX This could cause infinite loop on syncing between two + # IMAP servers ... + self.deletemessage(uid) else: raise UserWarning("Trying to save msg (uid %d) on folder " "%s returned invalid uid %d" % \ diff --git a/offlineimap/folder/IMAP.py b/offlineimap/folder/IMAP.py index 19a0340..1fa35f7 100644 --- a/offlineimap/folder/IMAP.py +++ b/offlineimap/folder/IMAP.py @@ -409,8 +409,10 @@ class IMAPFolder(BaseFolder): the new message after sucessfully saving it. :param rtime: A timestamp to be used as the mail date - :returns: the UID of the new message as assigned by the - server. If the folder is read-only it will return 0.""" + :returns: the UID of the new message as assigned by the server. If the + message is saved, but it's UID can not be found, it will + return 0. If the message can't be written (folder is + read-only for example) it will return -1.""" self.ui.debug('imap', 'savemessage: called') # already have it, just save modified flags