Кратко

  • После явного включения UIDONLY запрещает порядковые номера сообщений и передаёт UIDFETCH и VANISHED с UID. Исчезает подвижная таблица соответствий, но не обязанность доказать состояние ящика.
  • Долговечная ссылка объединяет имя ящика, UIDVALIDITY и UID. Объявление возможности, включение на соединении, завершение команды, запись кэша и сверка приложения — разные квитанции.

Если из начала большого почтового ящика удалить одно сообщение, порядковые номера всех последующих сдвинутся. Пока приходят новые события, клиенту приходится непрерывно сопоставлять меняющуюся позицию с более устойчивым UID. UIDONLY убирает именно эту работу: относительная позиция больше не участвует в командах над сообщениями.

Однако строка UIDONLY в CAPABILITY ещё не меняет сеанс. Клиент должен отправить ENABLE UIDONLY. Лишь после этого FETCH, STORE, SEARCH, COPY и MOVE без префикса UID становятся недопустимыми, а сервер отвечает UIDREQUIRED. Изменения атрибутов приходят как UIDFETCH, удаления — как VANISHED. Предложенная возможность и включённый режим являются разными фактами.

Польза упрощения реальна. Порядковый номер — всего лишь текущее место, которое перераспределяется после EXPUNGE. Отказ от него снижает риск применить задержавшийся ответ к неверному сообщению и освобождает клиент от постоянного обслуживания двух пространств имён.

Но оставшийся UID не является глобальным именем. RFC 9051 ограничивает его ящиком и поколением UIDVALIDITY. Если сервер не может сохранить прежнее пространство, поколение меняется, и старые UID утрачивают текущую силу. Поэтому одиночный UID в журнале аудита не задаёт полноценную ссылку.

UIDNEXT также не обещает следующий объект. Значение обозначает нижнюю границу будущих назначений, а не гарантирует сообщение с таким номером. Пробелы допустимы, сообщения могут быть удалены, а флаги — меняться при сохранении идентичности. Устойчивая ссылка и установившееся состояние — разные свойства.

UIDONLY не меняет EXISTS и RECENT. Он совместим с CONDSTORE и QRESYNC, а MODSEQ может приходить в UIDFETCH, но сам режим не требует этих механизмов синхронизации. Необязательное сопоставление по порядковым номерам в QRESYNC запрещено, чтобы не вернуть отброшенное пространство имён. Чистая адресация не создаёт полной истории.

COPY и MOVE показывают ту же границу. COPYUID может связать исходный UID с UID назначения и его UIDVALIDITY; тегированный результат подтверждает завершение команды IMAP. Он не доказывает, что индекс, архив, поиск или мобильный кэш надёжно принял новый объект. Нижележащий результат требует собственной квитанции.

Отвергнутая схема с нулём служит предупреждением. Ранний проект сохранял обычную форму FETCH, подставляя ноль на место порядкового номера. От неё отказались: старый клиент мог принять фиктивную позицию за настоящую и повредить кэш. Внешняя совместимость скрывала бы разрыв смысла, тогда как отдельная форма ответа делает смену полномочий заметной.

Рабочая цепочка доказательств должна соединять объявление возможности, её включение в конкретном соединении, ящик с данным UIDVALIDITY, наблюдавшиеся UID и изменения, тегированное завершение, долговечную локальную запись и сверку в потребляющем приложении. Один зелёный индикатор не может представлять всю цепь.

Источники