2011-03-19 63 views
1

我正在使用imaplib2docs)與IMAP服務器進行交互。如何判斷imaplib2空閒響應是否由於超時導致

我正在使用空閒命令,超時和回調。

問題是,我沒有看到任何方式告訴回調是否由於達到超時而觸發,或者服務器上發生了需要檢查的更改。

我只是每次都得到('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中的功能是否不存在?

回答

3

Piers Lauder(imaplib2的作者)剛剛在imaplib2-devel郵件列表上回答了這個問題。他說:

我認爲測試方法是否有空閒超時是執行:

instance.response('IDLE') 

將返回:

('IDLE', ['TIMEOUT']) 

如果空閒返回的原因作爲超時,而不是 其他的東西(例如('IDLE', [None]))。

我同意,這應該被記錄在案,所以我就修理imaplib2.html 文件

0

您必須在每次獲得此響應時手動檢查新消息。您可以將消息的UID存儲在列表中,並在每次回調時比較新的UID。通過這種方式,您可以輕鬆判斷是否有新消息或超時。

相關問題