【问题标题】:How to tell whether imaplib2 idle response resulted from timeout如何判断 imaplib2 空闲响应是否由超时引起
【发布时间】:2011-07-18 13:33:11
【问题描述】:

我正在使用imaplib2 (docs) 与 IMAP 服务器交互。

我正在使用空闲命令,带有超时和回调。

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

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

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

超时:

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 中不存在该功能吗?

【问题讨论】:

    标签: python timeout imap python-idle imaplib


    【解决方案1】:

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

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

    instance.response('IDLE')
    

    将返回:

    ('IDLE', ['TIMEOUT'])
    

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

    我同意这应该被记录,所以我会修复 imaplib2.html 文件

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-09
        • 2011-10-22
        • 1970-01-01
        • 1970-01-01
        • 2014-08-06
        • 2011-04-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多