2013-03-13 4 views
1

Я пишу сценарий, который извлекает все электронные письма с адреса электронной почты через IMAP.Идентификатор почтового ящика IMAP

В настоящее время я загружаю каждую папку (почтовый ящик) и сохраняю наивысший (выбранный) UID из каждой папки, поэтому я начинаю выборку с наивысшим UID + 1 при следующей синхронизации. Но что делать, если одна папка удаляется, а кто-то создает новую папку с тем же именем. UID предназначен только для одной папки и будет сброшен.

Я не могу найти способ найти уникальный идентификатор почтового ящика (папки).

ответ

1

Это именно то, для чего нужен UIDVALIDITY. Это «cookie», который идентифицирует воплощение имени папки. Он отправляется вам при SELECT папке. Вы должны сохранить его, и если он изменится, вы выбросите все, что знаете об этой папке.

См. RFC 3501 для получения более подробной информации, если вам это нужно.

+0

Итак, UIDVALIDITY возвращает строку или int, которая даст идентификатор UNIQUE для этой папки? – Floris

+0

Это целое число, да, это должно измениться, если это новая инкарнация папки с тем же именем. – Max

0

Я бы рекомендовал вам хранить mail size, также соответствующий uids. В случае, если максимальный uid, сохраненный на вашем cient, больше, чем тот, который был возвращен сервером (случай удаления папки), сравните uid и соответствующий размер почты.

идея Извлечение из письма UID+1 сам получил Су много недостатков .... Что делать, если определенный набор писем был удален с сервера через какой-либо другой интерфейс (веб/поп) или через другого клиента, то как вы собираетесь синхронизировать его с клиентом imap ??? Я предполагаю, что вы будете называть команду uid fetch для этого ... и если вы это делаете, то вы можете сравнить uids и размер почты для перекрестной проверки.

и для получения более точных результатов вы также можете использовать концепцию UIDVALIDITY. Но вы не можете много полагаться на это, так как я видел некоторые серверы imap, которые не используют его правильно.