Proper error handling for SEARCH and FETCH failures from the server
SEARCH and FETCH were never checking that the IMAP server actually returned OK. Throw OfflineImapErrors at severity FOLDER in case one of them fails. Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de> Signed-off-by: Nicolas Sebrecht <nicolas.s-dev@laposte.net>
This commit is contained in:
parent
f755c8b423
commit
3302940382
@ -144,15 +144,28 @@ class IMAPFolder(BaseFolder):
|
|||||||
search_cond += ")"
|
search_cond += ")"
|
||||||
|
|
||||||
res_type, res_data = imapobj.search(None, search_cond)
|
res_type, res_data = imapobj.search(None, search_cond)
|
||||||
# Result UIDs seperated by space, coalesce into ranges
|
if res_type != 'OK':
|
||||||
messagesToFetch = imaputil.uid_sequence(res_data.split())
|
raise OfflineImapError("SEARCH in folder [%s]%s failed. "
|
||||||
if not messagesToFetch:
|
"Search string was '%s'. Server responded '[%s] %s'" % (
|
||||||
|
self.getrepository(), self,
|
||||||
|
search_cond, res_type, res_data),
|
||||||
|
OfflineImapError.ERROR.FOLDER)
|
||||||
|
|
||||||
|
# Result UIDs are seperated by space, coalesce into ranges
|
||||||
|
msgsToFetch = imaputil.uid_sequence(res_data.split())
|
||||||
|
if not msgsToFetch:
|
||||||
return # No messages to sync
|
return # No messages to sync
|
||||||
|
|
||||||
# Get the flags and UIDs for these. single-quotes prevent
|
# Get the flags and UIDs for these. single-quotes prevent
|
||||||
# imaplib2 from quoting the sequence.
|
# imaplib2 from quoting the sequence.
|
||||||
res_type, response = imapobj.fetch("'%s'" % msgsToFetch,
|
res_type, response = imapobj.fetch("'%s'" % msgsToFetch,
|
||||||
'(FLAGS UID)')
|
'(FLAGS UID)')
|
||||||
|
if res_type != 'OK':
|
||||||
|
raise OfflineImapError("FETCHING UIDs in folder [%s]%s failed. "
|
||||||
|
"Server responded '[%s] %s'" % (
|
||||||
|
self.getrepository(), self,
|
||||||
|
res_type, response),
|
||||||
|
OfflineImapError.ERROR.FOLDER)
|
||||||
finally:
|
finally:
|
||||||
self.imapserver.releaseconnection(imapobj)
|
self.imapserver.releaseconnection(imapobj)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user