Кратко

  • RFC 3461 позволил запрашивать для каждого получателя уведомления об успехе, сбое или задержке и передавать через ретрансляторы идентификаторы транзакции и исходного адресата. RFC 3464 придал ответу машинно-читаемую структуру.
  • Термины сами ограничивают свои обещания: delivered не означает прочтение, relayed отмечает границу ответственности за положительный отчёт, а DSN можно подделать, потерять или сократить ради конфиденциальности переадресации.

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

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

Опубликованные в январе 2003 года RFC 3461, 3463 и 3464 разделили запрос, формат отчёта и классификацию состояния. Они не обещали универсальную доставку. Их архитектурной задачей стало точное распределение утверждений: отправитель выбирает желаемое свидетельство, MTA описывает принятое решение, а шлюз обозначает предел наблюдаемости.

Четыре параметра не превращали пожелание в приказ

Сервер объявляет поддержку словом DSN в ответе EHLO. Новых команд нет: MAIL получает RET и ENVID, а RCPTNOTIFY и ORCPT.

NOTIFY задаётся для адресата. Можно сочетать SUCCESS, FAILURE и DELAY; NEVER используется отдельно. Без параметра сервер вправе придерживаться традиционного отчёта о сбое, иногда с уведомлением о задержке. Отправитель выбирает виды известий, но не предписывает исход.

DELAY не задаёт таймер. Удерживающий письмо MTA сам определяет, когда ожидание стало необычным, пока конечный результат ещё неизвестен. Одна и та же причина класса 4.x.x может сопровождать delayed при продолжающихся попытках и failed, когда очередь отказалась от них.

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

Два идентификатора сохраняли разные сущности

ENVID обозначает транзакцию конверта и при наличии возвращается как Original-Envelope-Id. Почтовая система не толкует значение: смысл задаёт отправитель или его агент. Это не Message-Id заголовка. Тот идентифицирует содержимое, этот — конкретную подачу. Один текст можно подать несколько раз, а одна транзакция может включать получателей с разными судьбами.

ORCPT хранит исходный адрес, указанный отправителем. При первой подаче он должен совпадать с RCPT TO. После пересылки рабочий адрес может измениться, а исходный продолжит путь рядом. Первый показывает следующую точку попытки, второй связывает отчёт с адресатом первоначального поручения.

Вместе они позволяют сопоставить отчёт сначала с транзакцией, затем с получателем. Но это не аутентификация. Правдоподобный ENVID не доказывает автора DSN, а адрес ORCPT — личность владельца. Это ключи корреляции, которые полезны лишь при сохранности по цепочке и отдельной проверке происхождения.

Action описывал решение, Status — условие

RFC 3464 определил DSN как multipart/report: человеческое объяснение, затем message/delivery-status с общими полями и группой на каждого адресата, после чего при необходимости возвращается исходное письмо или заголовки.

У каждого адресата есть Action: failed, delayed, delivered, relayed либо expanded. Рядом находится Status по RFC 3463: 2.x.x означает успех, 4.x.x — устойчивый временный сбой, 5.x.x — постоянный, а следующие части уточняют предмет и деталь.

Поля не дублируются. Тайм-аут DNS может сохранять класс 4.x.x, когда очередь продолжает попытки и когда позднее сдаётся. Action меняется с delayed на failed: статус называет состояние среды, действие — эксплуатационное решение.

failed окончателен, delayed нет. delivered завершает отчётность для адресата, но может означать передачу распространителю списка и никогда не свидетельствует о прочтении. expanded фиксирует приём многополучательским псевдонимом и создание дальнейших адресатов, поэтому позже возможны новые отчёты.

relayed честно отмечает край знания. Письмо передано в среду, которая не отвечает за DSN об успешной доставке. MTA подтверждает передачу, а не итоговый почтовый ящик. Стандарт не превращает границу в вымышленный успех.

Неудача отчёта должна была закончиться молча

DSN сама является письмом и может не дойти. Если её сбой создаст следующую DSN, недоступные системы способны породить бесконечную цепочку уведомлений. Поэтому DSN, отправленная по SMTP, использует пустой обратный путь MAIL FROM:<>; её неудача не вызывает нового сетевого отчёта.

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

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

Единый формат не удостоверял подлинность

RFC 3464 предупреждает: DSN подделывается так же легко, как обычная интернет-почта. Ложный успех способен преждевременно завершить разбор, ложный сбой — вызвать повтор, удалить адрес из списка или запустить неверную поддержку. ENVID помогает сопоставлению, но не служит подписью.

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

Историческое достижение DSN — грамматика ограниченной власти. Отправитель задаёт запрос и метки. MTA принимает, повторяет или прекращает и сообщает собственное действие. Шлюз переводит до доступной границы, политика приватности может закрыть наблюдение, а человеческое чтение целиком остаётся за пределами SMTP.

В реестре IANA DSN по-прежнему связан с RFC 3461. Квитанция полезна тем, что различает транзакцию, исходного адресата, сообщившую систему, действие и диагноз, не выдавая их за обещание попадания во входящие или внимания человека. Предел знания — часть свидетельства.

Источники