Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 21, 2017 14:12:47

WhiteTiger
Зарегистрирован: 2012-11-15
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

IMAP и выборка UID-ов старше N

При работе с imaplib наткнулся на проблему которая, похоже, является проблемой серверной части. Или же какой-то особенностью.
В директории Х имею последнее полученное письмо с UID 100. Пытаясь получить свежую почту отправляю такой search-запрос:

 uids = imap.uid('SEARCH', 'UID 101:*')
либо так
 uids = imap.search(None, 'UID 101:*')
Сверившись с RFC, ожидаю получения всех юидов которые >= 101-го, т.е. 101, 102, …. . Однако иногда (не всегда) сервер возвращает UIDы меньше указанного в запросе. Например 97 или 99. При этом данные UIDы являются письмами пришедшими раньше UID 100, т.е. это точно не новая почта.

Сколько не гуглил на эту тему, везде пишут одно - возьми последний UID+1 как N и сделай “SEARCH UID N:*”. Однако действительность иная, и не на домашнем тест-сервере, а например на imap.yandex.ru.
Кто-нибудь сталкивался с таким? Интересно раскопать в чём может быть причина.

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

Офлайн

#2 Сен. 25, 2017 06:48:19

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

IMAP и выборка UID-ов старше N

WhiteTiger
Пока что для получения свежей почты приходится каждый раз сравнивать список имеющихся UIDов в директории на сервере, и список UIDов уже полученных писем
А чем search(None, “(UNSEEN)”) не угодил?



Офлайн

#3 Сен. 25, 2017 08:30:42

WhiteTiger
Зарегистрирован: 2012-11-15
Сообщения: 31
Репутация: +  0  -
Профиль   Отправить e-mail  

IMAP и выборка UID-ов старше N

pyuser
А чем search(None, “(UNSEEN)”) не угодил?
У меня не совсем обычная ситуация. Ящик юзать могут несколько человек и один из них может письмо просмотреть, а остальным нужно тоже сообщить что есть новое письмо и показать какое.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version