如何判断imaplib2是否因超时而导致空闲响应

时间:2011-03-19 00:27:06

标签: python timeout imap python-idle imaplib

我正在使用imaplib2docs)与IMAP服务器进行交互。

我正在使用idle命令,超时和回调。

问题是,我没有看到任何方法告诉回调是否由达到超时触发,或者是否需要检查服务器上的更改。

我每次都得到('OK', ['IDLE terminated (Success)'])

以下是两种情况的调试输出:

TIMEDOUT:

15:43.94 MainThread server IDLE started, timeout in 5.00 secs
15:48.94 imap.gmail.com handler server IDLE timedout
15:48.94 imap.gmail.com handler server IDLE finished
15:48.94 imap.gmail.com writer > DONE\r\n
15:49.17 imap.gmail.com reader < DDDM6 OK IDLE terminated (Success)\r\n
15:49.17 imap.gmail.com handler _request_pop(DDDM6, ('OK', ['IDLE terminated (Success)']))

发生了一些事情:

18:41.34 MainThread server IDLE started, timeout in 50.00 secs
19:01.35 imap.gmail.com reader < * 1 EXISTS\r\n
19:01.37 imap.gmail.com handler server IDLE finished
19:01.37 imap.gmail.com writer > DONE\r\n
19:01.59 imap.gmail.com reader < BFCN6 OK IDLE terminated (Success)\r\n
19:01.59 imap.gmail.com handler _request_pop(BFCN6, ('OK', ['IDLE terminated (Success)']))

我错过了什么?

imaplib2中是否存在功能?

2 个答案:

答案 0 :(得分:4)

Piers Lauder(imaplib2的作者)刚刚在imaplib2-devel邮件列表上回答了这个问题。他说:

  

我认为测试IDLE是否超时的方法是执行:

instance.response('IDLE')
     

将返回:

('IDLE', ['TIMEOUT'])
     

如果空闲的原因是作为超时返回,而不是   别的东西(比如('IDLE', [None]))。

     

我同意这应该记录在案,所以我将修复imaplib2.html   文件

答案 1 :(得分:0)

每次收到此回复时,您都必须手动检查新邮件。您可以将消息的UID存储在列表中,并在每次回调时将新UID与其进行比较。通过这种方式,您可以轻松判断是否有新消息或超时。