Обычный подход заключается в выполнении следующих двух команд IMAP для каждой папки:
. EXAMINE "<foldername>"
. FETCH 1:* (UID FLAGS)
Первая команда выбирает папку и возвращает UIDVALIDITY этой папки. Если это значение соответствует ранее возвращенному UIDVALIDITY для этой папки, вы можете положиться на UIDs . Вторая команда возвращает (как минимум) UID и все FLAGS для каждого письма в выбранной папке.
- Вы должны использовать UID , чтобы определить, какие письма были добавлены или удалены. Обратите внимание, что содержимое письма не может быть изменено без изменения UID .
- В базовом IMAP FLAGS являются единственными атрибутами, которые можно изменить для электронного письма. Флаги содержат информацию о прочитанных письмах (
\Seen
) и удаленных письмах (\Deleted
).
Этот подход используется многими клиентами IMAP, и большинство серверов IMAP оптимизированы для них. Ограничивающим фактором обычно является доступная пропускная способность сети между клиентом и сервером.
Следующие ситуации немного сложнее:
- Что делать, если UIDVALIDITY не совпадает? Спецификация IMAP требует, чтобы серверы делали все возможное, чтобы избежать ненужных изменений этого значения.
- Должна ли быть оптимизация для перемещенных писем (фактически скопированных писем)? В базовом IMAP вы не можете обнаружить, что электронная почта является копией другой электронной почты - независимо от того, существует ли электронная почта в исходной папке или она уже была удалена и удалена.