Постоянные UID для почтового ящика
Мы должны разработать хранилище сообщений с использованием интерфейса IMAP, который должен иметь функцию постоянных UID, чтобы впоследствии эти сообщения можно было синхронизировать между несколькими устройствами (такими как мобильные устройства, ПК, ноутбуки) и устройство могло удалять / копировать сообщения. RFC 3501 упоминает, что UID уникальны в течение сеанса.
Итак, мой вопрос: говорит ли какой-нибудь IMAP RFC о постоянном UID для почтового ящика?
2 ответа
Каждому сообщению IMAP назначается UID, который является специфическим для пользователя, поскольку у двух пользователей могут быть получены два разных сообщения, но может быть назначен один и тот же UID. [aka UID!= UUID] Если ваше программное обеспечение выпускает простой FETCH 1:* (FLAGS)
сервер ответит последовательно пронумерованным списком независимо от UID сообщения. Любая команда, в которой вы хотите иметь дело конкретно с UID сообщения, должна быть уверена, что вы его правильно вводите, как в FETCH UID 1:* (FLAGS)
,
например:
a1 fetch 1:* (flags)
* 1 FETCH (FLAGS (\Seen))
* 2 FETCH (FLAGS (\Seen))
* 3 FETCH (FLAGS (\Seen))
* 4 FETCH (FLAGS (\Seen))
* 5 FETCH (FLAGS (\Answered \Seen))
* 6 FETCH (FLAGS (\Seen))
* 7 FETCH (FLAGS (\Seen))
* 8 FETCH (FLAGS (\Seen))
* 9 FETCH (FLAGS (\Seen))
* 10 FETCH (FLAGS (\Seen))
против:
a8 uid fetch 1:* (flags)
* 1 FETCH (UID 1 FLAGS (\Seen))
* 2 FETCH (UID 2 FLAGS (\Seen))
* 3 FETCH (UID 3 FLAGS (\Seen))
* 4 FETCH (UID 4 FLAGS (\Seen))
* 5 FETCH (UID 5 FLAGS (\Answered \Seen))
* 6 FETCH (UID 6 FLAGS (\Seen))
* 7 FETCH (UID 8 FLAGS (\Seen))
* 8 FETCH (UID 9 FLAGS (\Seen))
* 9 FETCH (UID 10 FLAGS (\Seen))
* 10 FETCH (UID 11 FLAGS (\Seen))
Тем не менее, я не понимаю, почему вам нужно отслеживать UID отдельно для синхронизации между несколькими устройствами. Пока каждое устройство собирает информацию с сервера IMAP, они будут синхронизированы по умолчанию. По сути, вы заново реализуете функциональность, которая уже существует на любом сервере IMAP.
RFC3501 требует, чтобы идентификаторы UID оставались постоянными в течение сеанса. Это не означает, что они не должны быть постоянными между сеансами - напротив, если они не являются постоянными, клиентам IMAP придется загружать их все время.
Я бы посоветовал перечитать соответствующие части RFC3501 несколько раз здесь - это важная часть синхронизации почтового ящика IMAP, и важно понять это правильно, включая отношения с UIDVALIDITY
а также UIDNEXT
, так же хорошо как CONDSTORE
а также QRESYNC
расширения.
Также имейте в виду, что существуют довольно строгие гарантии относительно того, как назначаются идентификаторы UID и как должен выглядеть UID вновь прибывающего сообщения. Наличие уникального идентификатора для каждого сервера недостаточно.