Уникальные идентификаторы электронной почты с IMAP

Я создаю почтовый интерфейс GMail в Django/Python. Я хочу создать скелет из всех электронных писем, содержащих тему и дату, своего рода индекс уровня обзора, чтобы даже если электронное письмо было удалено, у меня был индикатор, существовавший и когда он был отправлен.

Моя проблема в том, что, учитывая, что UID IMAP меняются, что я могу использовать в качестве уникального идентификатора электронной почты? Даже если я создаю скелет каждого электронного письма с уникальным идентификатором в своей базе данных, если я связываю с ним UID электронной почты и имя папки IMAP, UID может измениться при удалении других электронных писем.

Что было бы лучшим решением для создания уникального идентификатора для электронной почты? Я думал об использовании комбинации (дата отправки, тема), но я искал что-то более простое.

Может кто-нибудь помочь?

Спасибо

2 ответа

Насколько я понимаю, UID не изменится... поэтому можно использовать его как ссылку между IMAP/ вашей БД.

Из RFC3501 (обновления RFC822) - http://www.limilabs.com/mail/rfc/3501

2.3.1.1. Атрибут сообщения уникального идентификатора (UID)

32-битное значение присваивается каждому сообщению, которое при использовании с
Значение достоверности уникального идентификатора (см. ниже) образует 64-битное значение
которые НЕ ДОЛЖНЫ ссылаться на любое другое сообщение в почтовом ящике или на любое другое
последующий почтовый ящик с тем же именем навсегда. Уникальные идентификаторы
присваиваются строго по возрастанию в почтовом ящике; как каждый
сообщение добавляется в почтовый ящик, ему присваивается более высокий UID, чем
сообщение (я), которые были добавлены ранее. В отличие от последовательности сообщений
числа, уникальные идентификаторы не обязательно являются смежными.

Уникальный идентификатор сообщения НЕ ДОЛЖЕН изменяться во время
сеанс, и не должен меняться между сессиями. Любое изменение
НЕОБХОДИМО, чтобы уникальные идентификаторы между сессиями были обнаружены с использованием
Механизм UIDVALIDITY обсуждается ниже.

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

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

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

http://www.jwz.org/doc/mid.html

Больше чтения:

http://en.wikipedia.org/wiki/Message-ID

Другие вопросы по тегам