Постоянные UID для почтового ящика

Мы должны разработать хранилище сообщений с использованием интерфейса IMAP, который должен иметь функциональность постоянных UID, чтобы позже эти сообщения можно было синхронизировать на нескольких устройствах (например, мобильных устройствах, ПК, ноутбуках), и устройство могло удалять/копировать сообщения. В RFC 3501 упоминается, что UID уникальны в рамках сеанса.

Итак, мой вопрос: говорит ли какой-либо IMAP RFC о постоянном UID для почтового ящика?


person Community    schedule 29.08.2013    source источник
comment
Что не так с IMAP? Вы, вероятно, захотите быть совместимым с ним.   -  person 84104    schedule 30.08.2013


Ответы (2)


Каждому сообщению IMAP назначается уникальный идентификатор пользователя, так как два пользователя могут получить два разных сообщения, но им будет назначен один и тот же идентификатор пользователя. [также известный как UID != UUID] Если ваше программное обеспечение выдает простой FETCH 1:* (FLAGS), сервер ответит последовательно пронумерованным списком, игнорируя UID сообщения. Любую команду, в которой вы хотите иметь дело конкретно с UID сообщения, вы должны быть уверены, что вводите ее правильно, как в FETCH UID 1:* (FLAGS).

eg:

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.

person Sammitch    schedule 29.08.2013
comment
Возможно, более уместно как отдельный вопрос, но imap uid (может быть, просто) простые целые числа? Я должен признать, что ожидал, что они будут больше похожи на UUID, и то, как я прочитал RFC imap, казалось, предполагал, что они будут похожи на UUID, но я думаю, что нет? - person David; 08.03.2014
comment
В RFC3501 есть Unique Identifier (UID), а также Message Sequence Number. Таким образом, порядковый номер находится в каждом почтовом ящике 1,2,3,4..., а UID уникален для всей системы. Оба являются целыми числами, но не UUID. UUID содержит A-F0-9 и «-». - person TheFox; 21.05.2014

Что RFC3501 предписывает, так это то, что UID должны оставаться постоянными в течение сеанса. Это не означает, что они не должны быть постоянными между сеансами — напротив, если они не являются постоянными, клиентам IMAP придется загружать их все время.

Я бы посоветовал несколько раз перечитать здесь соответствующие части RFC3501 — это важная часть синхронизации почтовых ящиков IMAP, и важно сделать это правильно, включая отношения с UIDVALIDITY и UIDNEXT, а также CONDSTORE. и QRESYNC расширения.

Также имейте в виду, что существуют довольно строгие гарантии того, как назначаются UID и как должен выглядеть UID вновь прибывающего сообщения должен. Наличие уникального идентификатора для каждого сервера недостаточно.

person Jan Kundrát    schedule 02.09.2013