understand multiple EXISTS replies from servers like Zimbra
Lars Thalmann <web@larsthalmann.com> writes: > It seems some servers (Zimbra?) respond to imap SELECT requests with > multiple EXISTS lines: > > ? SELECT INBOX > * 500 EXISTS > * 0 RECENT > * 1000 EXISTS > * 0 RECENT > * 1500 EXISTS > * 0 RECENT > * 1567 EXISTS > * 0 RECENT Signed-off-by: Knut Anders Hatlen <kahatlen@gmail.com> Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de> Signed-off-by: Nicolas Sebrecht <nicolas.s-dev@laposte.net>
This commit is contained in:
		 Knut Anders Hatlen
					Knut Anders Hatlen
				
			
				
					committed by
					
						 Nicolas Sebrecht
						Nicolas Sebrecht
					
				
			
			
				
	
			
			
			 Nicolas Sebrecht
						Nicolas Sebrecht
					
				
			
						parent
						
							068df7d026
						
					
				
				
					commit
					9ad1810e43
				
			| @@ -85,9 +85,13 @@ class IMAPFolder(BaseFolder): | |||||||
|             # Primes untagged_responses |             # Primes untagged_responses | ||||||
|             imapobj.select(self.getfullname(), readonly = 1, force = 1) |             imapobj.select(self.getfullname(), readonly = 1, force = 1) | ||||||
|             try: |             try: | ||||||
|                 # Some mail servers do not return an EXISTS response if |                 # 1. Some mail servers do not return an EXISTS response | ||||||
|                 # the folder is empty. |                 # if the folder is empty.  2. ZIMBRA servers can return | ||||||
|                 maxmsgid = long(imapobj.untagged_responses['EXISTS'][0]) |                 # multiple EXISTS replies in the form 500, 1000, 1500, | ||||||
|  |                 # 1623 so check for potentially multiple replies. | ||||||
|  |                 maxmsgid = 0 | ||||||
|  |                 for msgid in imapobj.untagged_responses['EXISTS']: | ||||||
|  |                     maxmsgid = max(long(msgid), maxmsgid) | ||||||
|             except KeyError: |             except KeyError: | ||||||
|                 return True |                 return True | ||||||
|  |  | ||||||
| @@ -167,10 +171,13 @@ class IMAPFolder(BaseFolder): | |||||||
|                     return |                     return | ||||||
|             else: |             else: | ||||||
|                 try: |                 try: | ||||||
|                     # Some mail servers do not return an EXISTS response if |                     # 1. Some mail servers do not return an EXISTS response | ||||||
|                     # the folder is empty. |                     # if the folder is empty.  2. ZIMBRA servers can return | ||||||
|  |                     # multiple EXISTS replies in the form 500, 1000, 1500, | ||||||
|                     maxmsgid = long(imapobj.untagged_responses['EXISTS'][0]) |                     # 1623 so check for potentially multiple replies. | ||||||
|  |                     maxmsgid = 0 | ||||||
|  |                     for msgid in imapobj.untagged_responses['EXISTS']: | ||||||
|  |                         maxmsgid = max(long(msgid), maxmsgid) | ||||||
|                     messagesToFetch = '1:%d' % maxmsgid; |                     messagesToFetch = '1:%d' % maxmsgid; | ||||||
|                 except KeyError: |                 except KeyError: | ||||||
|                     return |                     return | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user