]> code.delx.au - offlineimap/blobdiff - offlineimap/folder/IMAP.py
Update FSF address
[offlineimap] / offlineimap / folder / IMAP.py
index 0bf58e8c6d8567579e8aa7e1ae29f8c4c23b2c43..7cb334a1598a77d280f49bc7ee4de3fe74a65d51 100644 (file)
@@ -14,7 +14,7 @@
 #
 #    You should have received a copy of the GNU General Public License
 #    along with this program; if not, write to the Free Software
-#    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
 
 from Base import BaseFolder
 from offlineimap import imaputil, imaplib
@@ -231,11 +231,11 @@ class IMAPFolder(BaseFolder):
             assert(imapobj.check()[0] == 'OK')
 
             # Keep trying until we get the UID.
-            try:
-                ui.debug('imap', 'savemessage: first attempt to get new UID')
-                uid = self.savemessage_searchforheader(imapobj, headername,
-                                                       headervalue)
-            except ValueError:
+            ui.debug('imap', 'savemessage: first attempt to get new UID')
+            uid = self.savemessage_searchforheader(imapobj, headername,
+                                                   headervalue)
+            # See docs for savemessage in Base.py for explanation of this and other return values
+            if uid <= 0:
                 ui.debug('imap', 'savemessage: first attempt to get new UID failed.  Going to run a NOOP and try again.')
                 assert(imapobj.noop()[0] == 'OK')
                 uid = self.savemessage_searchforheader(imapobj, headername,
@@ -243,7 +243,9 @@ class IMAPFolder(BaseFolder):
         finally:
             self.imapserver.releaseconnection(imapobj)
 
-        self.messagelist[uid] = {'uid': uid, 'flags': flags}
+        if uid: # avoid UID FETCH 0 crash happening later on
+            self.messagelist[uid] = {'uid': uid, 'flags': flags}
+
         ui.debug('imap', 'savemessage: returning %d' % uid)
         return uid