Мне нужно написать парсер для сообщений электронной почты на некоторых серверах IMAP. Он запускается как задача cron и сохраняет результаты в БД.
Мне нужен способ извлечения только тех сообщений, которые не были проанализированы уже при предыдущих запусках.
Существует существующая схема БД, которая предполагает, что разработчик должен использовать UID для отслеживания «новых» сообщений одного конкретного почтового ящика. Интересно, правильно ли это ...
Я вижу, что RFC3501 говорит, что UID, UIDVALIDITY и имя почтового ящика могут меняться в разных обстоятельствах.
В частности, UID может меняться между сеансами, и вы можете сказать, изменился ли UIDVALIDITY.
Поэтому я не могу сохранить UID с UIDVALIDITY в БД для сообщения и быть уверенным, что эта пара чисел не будет бессмысленной в будущих запусках.
RFC3501 также говорит:
Уникальные идентификаторы ДОЛЖНЫ всегда строго возрастать в почтовом ящике.
Итак, давайте предположим, что UIDVALIDITY изменяется. Все UID регенерированы для почтового ящика.
Означает ли это, что предыдущий UID 1000 для последнего сообщения будет строго выше 1000? Или это просто означает, что старые сообщения должны иметь меньшие идентификаторы UID, чем новые, и не иметь никакого отношения к предыдущим идентификаторам?
Более того, если бы я связался с Message-ID вместо UID. Я обнаружил, что RFC-2822 говорит, что в сообщении ДОЛЖЕН существовать идентификатор сообщения, что означает, что вообще не может быть никакого идентификатора сообщения.
Так как мне отслеживать, какие сообщения я уже проанализировал, а какие "новые" между запусками парсера?