Coalesce SEARCH uid list into sequence set
Rather than passing in huge lists of continuous numbers which eventually overflow the maximum command line length, we coalesce number ranges before passing the UID sequence to SEARCH. This should do away with the error that has been reported with busy mailing lists and 'maxage'. Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de> Signed-off-by: Nicolas Sebrecht <nicolas.s-dev@laposte.net>
This commit is contained in:
parent
373e7cdbc1
commit
06bfff7c04
@ -143,14 +143,13 @@ class IMAPFolder(BaseFolder):
|
|||||||
search_condition += "SMALLER " + self.config.getdefault("Account " + self.accountname, "maxsize", -1)
|
search_condition += "SMALLER " + self.config.getdefault("Account " + self.accountname, "maxsize", -1)
|
||||||
|
|
||||||
search_condition += ")"
|
search_condition += ")"
|
||||||
searchresult = imapobj.search(None, search_condition)
|
|
||||||
|
|
||||||
#result would come back seperated by space - to change into a fetch
|
res_type, res_data = imapobj.search(None, search_condition)
|
||||||
#statement we need to change space to comma
|
#result UIDs come back seperated by space
|
||||||
messagesToFetch = searchresult[1][0].replace(" ", ",")
|
messagesToFetch = imaputil.uid_sequence(res_data.split())
|
||||||
except KeyError:
|
except KeyError:
|
||||||
return
|
return
|
||||||
if len(messagesToFetch) < 1:
|
if not messagesToFetch:
|
||||||
# No messages; return
|
# No messages; return
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
@ -172,7 +171,7 @@ class IMAPFolder(BaseFolder):
|
|||||||
# Now, get the flags and UIDs for these.
|
# Now, get the flags and UIDs for these.
|
||||||
# We could conceivably get rid of maxmsgid and just say
|
# We could conceivably get rid of maxmsgid and just say
|
||||||
# '1:*' here.
|
# '1:*' here.
|
||||||
response = imapobj.fetch(messagesToFetch, '(FLAGS UID)')[1]
|
response = imapobj.fetch("'%s'" % messagesToFetch, '(FLAGS UID)')[1]
|
||||||
finally:
|
finally:
|
||||||
self.imapserver.releaseconnection(imapobj)
|
self.imapserver.releaseconnection(imapobj)
|
||||||
for messagestr in response:
|
for messagestr in response:
|
||||||
|
Loading…
Reference in New Issue
Block a user