Как определить, произошел ли простой ответ imaplib2 в результате тайм-аута - PullRequest
2 голосов
/ 19 марта 2011

Я использую imaplib2 ( документы ) для взаимодействия с сервером IMAP.

Я использую команду ожидания, время ожидания и обратный вызов.

Проблема в том, что я не вижу способа сказать, был ли обратный вызов вызван истечением времени ожидания, или если на сервере произошло изменение, которое мне нужно проверить.

Я просто получаю ('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 ]

4 голосов
/ 08 декабря 2011

Пирс Лаудер (автор imaplib2) только что ответил на этот вопрос в списке рассылки imaplib2-devel.Он сказал:

Я думаю, что способ проверить, истек ли тайм-аут IDLE, состоит в следующем:

instance.response('IDLE')

, который вернет:

('IDLE', ['TIMEOUT'])

если причина, по которой простоя вернулась как время ожидания, а не что-то еще (например, ('IDLE', [None])).

Я согласен, что это должно быть задокументировано, поэтому я исправлю документ imaplib2.html

0 голосов
/ 24 апреля 2011

Вам придется вручную проверять наличие новых сообщений каждый раз, когда вы получаете этот ответ.Вы можете хранить UID сообщений в списке и сравнивать новые UID с ним при каждом обратном вызове.Таким образом, вы можете легко узнать, есть ли новые сообщения или время ожидания.

...