Кратко

  • RFC 5259 оставляет исходные данные хранилища неизменными и возвращает выбранное клиентом или сервером производное; успешное отображение не доказывает тождество байтов, подпись или замену оригинала.
  • Итоговый OK может включать частичные ошибки, а преобразование по умолчанию — удалять детали и заменять символы, поэтому нужен результат каждого элемента.

На экране осталась подпись, но исчез объект её проверки

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

RFC 5259 проводит иную границу: после серверного преобразования подписанной части клиент не может проверить подлинность нового содержимого прежней подписью. Не доверяющий серверу клиент должен скачать и проверить подписанный объект, затем преобразовать его локально.

Производное может быть полезным. Но видимость не переносит криптографическую власть источника.

Источник хранится, представление исполняется

Преобразование меняет только отправляемое клиенту; данные message store изменять нельзя. Другие клиенты сохраняют оригинал, ответы и пересылки — исходный материал, BODYSTRUCTURE — структуру, а проверка подписи — свой объект.

Выход может иметь другие MIME, структуру, кодирование, размеры, charset и объём. Это результат запроса. Его архивирование не доказывает изменения источника.

Сохраняйте идентичность источника — ящик, UID, часть и хеш — и идентичность выхода — запрос, параметры, политику, версию и хеш.

Объявленная способность не равна исполнению

Сервер сообщает CONVERT и BINARY. CONVERSIONS перечисляет пары и параметры, AVAILABLECONVERSIONS — цели части. Это карта возможностей.

Позднее могут отсутствовать ресурсы, не работать сервис, оказаться неверными параметры или недоступным конвертер. Версия и политика меняются. Название пути не является отпечатком результата.

Фиксируйте обнаружение и исполнение отдельно.

NIL передаёт серверу выбор видимой версии

Клиент задаёт цель или использует NIL. Сервер выбирает по данным устройства, предпочтениям, настройкам и представлению о распространённых форматах. Алгоритм полностью не задан.

Детали выше возможностей устройства можно убрать — например, снизить разрешение. Требование минимизировать потерю не гарантирует без потерь. Сервер может ошибиться в возможностях.

Это делегирование выбора представления. Квитанция должна назвать цель и основания выбора.

Корректный выход может потерять сведения

Для текста нужен целевой charset. unknown-character-replacement заменяет непредставимые знаки. Результат удовлетворяет запросу, утратив отличие в имени, сумме или символе.

Заголовки и MIME-параметры перекодируются. Сходный смысл не равен тем же октетам. Разделяйте байтовую, текстовую, визуальную и размерную точность.

Частичные диапазоны CONVERT BINARY относятся к перекодированным и декодированным данным, а не к смещениям оригинала. Координата производного не указывает место источника.

OK не означает полноту

CONVERTED может содержать TEMPFAIL, BADPARAMETERS и MISSINGPARAMETERS. При успехе хотя бы одного элемента итог обязан быть OK; даже при полном провале допустимы OK или NO.

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

BODYPARTSTRUCTURE обычно показывает точность исполнения, хотя не всегда причину. Храните её с параметрами и хешами.

Ни прочтения, ни нового канона

CONVERT не ставит \Seen; для этого нужен STORE. Создание байтов не доказывает читателя и смену состояния.

Кэш преобразований ограничивается против DoS. Это временное состояние, не альтернативный оригинал. Codec, политика и внешний сервис меняют будущий повтор.

Для решения сохраняйте фактический выход и среду его получения.

Конвертер — самостоятельная граница безопасности

Подготовленное APPEND и CONVERT атакует parser или codec; чрезмерное масштабирование истощает ресурсы; опасный перевод создаёт исполняемое. RFC советует отказывать дорогим операциям, проверять выход, журналировать личность и изолировать библиотеку от привилегированного хранилища.

Внешний сервис добавляет передачу. Общий доверенный домен уменьшает, но не стирает её. SASL/TLS защищает канал и сервер, не заверяет новые байты старой подписью.

Квитанция между источником и производным

Храните ящик, UIDVALIDITY/UID, часть, MIME, размер и хеш источника; типы, параметры, явный/стандартный выбор, возможности, предпочтения, политику, версию, конвертер, время и домен.

Добавьте каждый элемент, ошибку и статус, структуру/размер/хеш выхода, удаления, замены, кэш, проверку исходной подписи и отсутствие её наследования, просмотр, \Seen и последующее действие.

«Сервер выдал эти байты» проверяемо. «Это подписанное вложение» требует аутентификации новых байтов. «Преобразование успешно» требует результата каждого элемента.

RFC 5259 дал ограниченным клиентам полезную адаптацию. Руководство должно не позволить удобному представлению выдать себя за заверенный источник.

Источники