DSN (Delivery Status Notification): формат и коды уведомлений о доставке email
A Delivery Status Notification (DSN) is the standardized way mail servers communicate delivery outcomes. When a message cannot be delivered - or when the sender explicitly requests delivery confirmation - the receiving or intermediate MTA generates a DSN and sends it to the Envelope From (Return-Path) address. The format is defined in RFC 3464, and the practice of generating these messages is as old as SMTP itself.
Structure of a DSN message
A DSN is a multipart MIME message with a specific content type: multipart/report; report-type=delivery-status. It contains three parts:
- Human-readable explanation. Plain text describing what happened. This is what a person sees when they open a bounce message: "Your message could not be delivered to user@example.com."
- Machine-readable status. A structured block with fields like Status, Reporting-MTA, Remote-MTA, Action, and Diagnostic-Code. This is what automated bounce processors parse.
- Original message headers (or the full original message). This lets the sender identify which message bounced.
Status codes
The Status field uses the enhanced status code format from RFC 3463: three digits separated by dots (class.subject.detail). The first digit indicates the severity:
- 2.x.x - success. The message was delivered. DSNs with this class are delivery confirmations, rarely seen in practice because most servers do not generate positive DSNs by default.
- 4.x.x - temporary failure. The server could not deliver the message now but may succeed later. Examples: 4.2.2 (mailbox full), 4.7.1 (greylisting in effect).
- 5.x.x - permanent failure. The message will never be delivered to this address. Examples: 5.1.1 (user unknown), 5.2.1 (mailbox disabled), 5.7.1 (rejected by policy).
Что такое DSN
DSN (Delivery Status Notification) - это стандартный формат уведомлений о статусе доставки email. Когда письмо не может быть доставлено, принимающий (или промежуточный) сервер формирует DSN-сообщение и отправляет его на адрес Envelope From. Формат описан в RFC 3464.
DSN - это и есть тот «bounce», о котором говорят маркетологи. Но в техническом смысле bounce - это не просто факт отказа, а конкретное сообщение с машиночитаемым кодом статуса, диагностической информацией и заголовками исходного письма.
Коды статуса DSN
Код статуса в DSN имеет формат класс.тема.деталь (RFC 3463). Первая цифра определяет тип:
- 2.x.x - успех. Письмо доставлено. На практике положительные DSN генерируются редко.
- 4.x.x - временная ошибка. Сервер не смог доставить сейчас, но может позже. Пример: 4.2.2 (ящик переполнен).
- 5.x.x - постоянная ошибка. Письмо не будет доставлено. Пример: 5.1.1 (пользователь не найден), 5.2.1 (ящик отключён).
Как ESP обрабатывают DSN
Email-сервисы (ESP и SMTP relay) парсят входящие DSN автоматически. Система извлекает код статуса, адрес получателя и тип ошибки. На основе этого:
- 5.1.x (hard bounce) - адрес немедленно добавляется в suppression list. Повторная отправка на него блокируется.
- 4.x.x (soft bounce) - система ставит сообщение в очередь на повторную попытку. После N неудачных попыток (обычно 3-5) адрес также подавляется.
- Данные агрегируются в статистику bounce rate, которую видно в дашборде.
Проблемы с DSN на практике
Не все серверы генерируют корректные DSN. Некоторые отклоняют письма на этапе SMTP-транзакции (до генерации DSN) - тогда bounce фиксируется не через DSN, а через SMTP-ответ. Другие серверы молча отбрасывают сообщения без уведомления, чтобы не помогать спамерам определять валидные адреса.
Кроме того, bounce-адрес (Envelope From) может быть подделан спамером. В результате DSN уходит человеку, который не отправлял письмо. Этот эффект называется backscatter и сам по себе является формой спама.
DSN и валидация email
DSN сообщает о проблеме после попытки доставки. Валидация email решает задачу до отправки. SMTP-проверка (RCPT TO без DATA) по сути запрашивает у сервера получателя тот же ответ, который он выдал бы при реальной доставке, но без передачи тела письма. Это позволяет обнаружить 5.1.1 (user unknown) заранее, не генерируя bounce и не тратя репутацию IP.
uChecker выявляет невалидные адреса до отправки, чтобы вам не приходилось разбирать DSN-уведомления постфактум. Меньше bounces - чище статистика и стабильнее репутация отправителя.
