Python IMAP — порядок UID

Я пытаюсь написать простой IMAP-клиент и хочу получить одно новейшее сообщение. Сообщение с UID 46345 является самым новым в моем почтовом ящике, более старое сообщение имеет UID 46346. Из-за этого мой код не работает так, как я ожидал! Почему у самого нового сообщения нет самого высокого UID? Должен ли я не полагаться на самый высокий UID, имеющий самую последнюю дату?

_, data = imap.uid('search', None, "UNSEEN")    
latest_email_uid = data[0].split()[-1]
_, data = imap.uid('fetch', latest_email_uid, '(RFC822.HEADER)')
raw_email = data[0][1]
print raw_email

person janeh    schedule 13.09.2012    source источник


Ответы (2)


Я не думаю, что протокол IMAP предоставляет какие-либо гарантии того, что идентификаторы сообщений будут распределяться в порядке от самого старого сообщения к самому новому. UID могут даже время от времени меняться (как правило, если сервер IMAP должен переиндексировать почтовый ящик), пока изменяется UIDVALIDITY, чтобы уведомить клиентов об этом факте. Вы должны посмотреть заголовки дат в сообщениях (или, возможно, IMAP INTERNALDATE, если это то, что вас интересует) и отсортировать их самостоятельно.

person Celada    schedule 13.09.2012
comment
Ok. Я удивлен, что так много примеров IMAP используют что-то вроде data[0].split()[-1] для извлечения последнего сообщения... учитывая, насколько это ненадежно. - person janeh; 13.09.2012
comment
Последний здесь определяется последним, помещенным в почтовый ящик. Не последний заголовок по дате. Сообщения могут задерживаться или добавляться в почтовый ящик по бесчисленным причинам. Грубо говоря, порядок — это порядок их получения сервером. - person Max; 13.09.2012

Не гарантируется, что они будут в порядке даты.

Предположим, вы переместили одно самое старое электронное письмо из папки (почтового ящика) A в B и снова переместили его обратно в A, после чего ему будет присвоено новое значение uid.

person Subbi Reddy K    schedule 13.09.2012
comment
Действительно, они в порядке их добавления в почтовый ящик, что не обязательно по дате. Сообщение могло застрять на 3 дня, а затем появиться, или пользователь мог переместить сообщение из другого почтового ящика. - person Max; 13.09.2012