Лучший способ синхронизации электронной почты: UIDL POP3, UID IMAP, ID сообщения

Я делаю почтовый клиент, который работает POP3 и IMAP. Я программирую клиента на C++ с vmime api. У меня вопрос: как лучше синхронизировать почту?

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

  • IMAP: UID (RFC 3501)
  • POP3: UIDL (RFC 1932)
  • Сообщение в формате Интернет: идентификатор сообщения (RFC 5322)

Идентификатор сообщения является самым простым в использовании, но возможно ли, что существует два идентичных идентификатора сообщения? Одинаковый вопрос для UID (IMAP) и UIDL (UID)?

вы не могли бы мне помочь? Заранее спасибо.

2 ответа

Решение

Хотя Макс прав, говоря, что кортеж (FolderName, UIDVALIDITY, UID) никогда не будет ссылаться на какое-либо другое сообщение, к сожалению, нет гарантии, что на данное сообщение всегда будут ссылаться только с использованием того же кортежа. Серверы могут поднять UIDVALIDITYи не существует стандартного способа предоставления уникальных идентификаторов, которые сохраняются при перемещении сообщений или идентифицируют дубликаты сообщений.

В IMAP кортеж (FolderName, UIDVALIDITY, UID) гарантировано, по спецификации, всегда будет уникальным для данного сервера. Обратите внимание, что все три значения необходимы, чтобы гарантировать уникальность. Каждая папка имеет свои собственные UID, которые могут перекрываться. Удаленная и переименованная папка также может иметь одинаковые идентификаторы UID, но они должны иметь разные идентификаторы UIDVALIDITY.

В POP3 UIDL обычно достаточно, так как нет папок.

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

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