2014-10-08 5 views
3

Я использую python для подключения к gmail через IMAP.Gmail IMAP иногда возвращает плохие результаты для fetch

Когда я делаю выборку для кучи uids, результаты иногда содержат пару странных, прикрепленных к концу.

Эта ошибка появляется прерывистая и начинает появляться когда-то на прошлой неделе или около того.

Например я выборки, как:

>>>import imaplib 
>>>conn = imaplib.IMAP4_SSL('imap.gmail.com') 
>>># authenticate etc 
>>>conn.uid('fetch', '12,13', '(X-GM-THRID)') 

я иногда получаю результат, как:

>>>['1 (X-GM-THRID 123123123123 UID 12)', 
    '2 (X-GM-THRID 123123123123 UID 13)', 
    '365022 (UID 601722 FLAGS (\\Seen))'] 

(разрывы строк добавлены для читаемости, Идентификаторы изменен с оригинала, как правило, я выборка гораздо больше двух.)

Это довольно странно. Я не просил ничего о дополнительном сообщении. Иногда это бывает, иногда нет. Независимо от того, какие поля я получаю, дополнительный результат (я видел только один или два) никогда не содержит их и содержит только информацию FLAGS.

Любые идеи, почему это может произойти?

+0

Какой тип 'conn'? –

+0

imaplib.IMAP4_SSL - Я отредактировал вопрос, чтобы отразить это. – Lee

ответ

3

Следующая была опубликована в списке рассылки протокола IMAP ранее на этой неделе:

«По состоянию на вчерашний день [понедельник октября 7], Gmail теперь поддерживает отчетности флаги изменения в любом месте мы бы сообщать о новых/УДАЛЕНЫ сообщений (т.е. наиболее помещает его разрешенным протоколом, но определенно во время IDLE). Он доступен только для пользователей gmail.com в настоящий момент, пользователи Google Apps последуют через неделю или около того, если мы не найдем никаких проблем ».

Тем не менее, по-видимому, проблемы с новой функциональностью, потому что сегодня они сказали, что это происходит откат:

«Мы видим, что несколько отчетов программ не ожидается дополнительным FETCH ответов, которые мы выкатили в понедельник. Мы скоро возвращаемся, так как у старых версий очень популярного клиента возникают проблемы (хотя это и не известно нам с этой частью вещей) ».

-Rick

+0

Отлично - спасибо, что поняли, что для меня. – Lee

2

Gmail отправляет вам незапрашиваемые FLAGS обновления (поскольку кто-то удаленно удалил сообщение). Это не в ответ на ваш запрос, но IMAP позволяет серверу отправлять вам любую * информацию в любое время. Многие серверы будут сохранять эти незапрашиваемые ответы для ответов IDLE или NOOP, но, судя по всему, Gmail не хочет ждать.

Однако до недавнего времени (видимо?) Gmail вообще не отправлял обновления флагов, а только EXPUNGE.

*: Есть несколько правил, по которым ответы могут быть отправлены, когда нужно избегать условий гонки, но это не один из них.