IMAP синхронизация - PullRequest
       1

IMAP синхронизация

12 голосов
/ 31 марта 2012

Я использую IMAP-клиент, и у меня проблема с синхронизацией почтовых ящиков IMAP.

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

Стоит ли извлекать все сообщения с сервера и сравнивать их с локальными данными для синхронизации?

Ответы [ 2 ]

23 голосов
/ 01 апреля 2012

Обычный подход заключается в выполнении следующих двух команд IMAP для каждой папки:

. EXAMINE "<foldername>"
. FETCH 1:* (UID FLAGS)

Первая команда выбирает папку и возвращает UIDVALIDITY этой папки. Если это значение соответствует ранее возвращенному UIDVALIDITY для этой папки, вы можете положиться на UIDs . Вторая команда возвращает (как минимум) UID и все FLAGS для каждого письма в выбранной папке.

  • Вы должны использовать UID , чтобы определить, какие письма были добавлены или удалены. Обратите внимание, что содержимое письма не может быть изменено без изменения UID .
  • В базовом IMAP FLAGS являются единственными атрибутами, которые можно изменить для электронного письма. Флаги содержат информацию о прочитанных письмах (\Seen) и удаленных письмах (\Deleted).

Этот подход используется многими клиентами IMAP, и большинство серверов IMAP оптимизированы для них. Ограничивающим фактором обычно является доступная пропускная способность сети между клиентом и сервером.

Следующие ситуации немного сложнее:

  • Что делать, если UIDVALIDITY не совпадает? Спецификация IMAP требует, чтобы серверы делали все возможное, чтобы избежать ненужных изменений этого значения.
  • Должна ли быть оптимизация для перемещенных писем (фактически скопированных писем)? В базовом IMAP вы не можете обнаружить, что электронная почта является копией другой электронной почты - независимо от того, существует ли электронная почта в исходной папке или она уже была удалена и удалена.
13 голосов
/ 12 августа 2014

Возможно, слишком поздно для вашего приложения, но вы можете найти полную стратегию синхронизации IMAP в этом RFC: http://tools.ietf.org/html/rfc4549!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...