DSN / bounces

DSN (Delivery Status Notification, RFC 3461, RFC 3464) — стандартный формат уведомлений о статусе доставки почты: «доставлено», «отклонено», «отложено». Основной инструмент диагностики почтовых проблем. То что в народе называют bounces.

Виды DSN

ТипЧто
DeliveredУспешно доставлено (просят через ORCPT)
DelayedВременная проблема, ещё пытаемся (обычно 4 часа простоя)
Failed (bounce)Окончательный отказ
RelayedПередано в non-DSN систему
ExpandedMailing-list развернул адрес

Формат

DSN — обычное письмо (Content-Type: multipart/report) с тремя частями:

  1. Human-readable текстовое объяснение.
  2. Machine-readablemessage/delivery-status: структурированные поля.
  3. Original message (или заголовки): что не доставилось.

Пример bounce

From: MAILER-DAEMON@mail.example.com
To: alice@example.com
Subject: Delivery Status Notification (Failure)
Content-Type: multipart/report; report-type=delivery-status;
              boundary="=_bounce_boundary"

--=_bounce_boundary
Content-Type: text/plain; charset=utf-8

Your message could not be delivered to bob@invalid.com.
The recipient's mailbox does not exist.

--=_bounce_boundary
Content-Type: message/delivery-status

Reporting-MTA: dns; mail.example.com
X-Postfix-Queue-ID: A1B2C3D4
Arrival-Date: Wed, 15 Jul 2026 22:00:00 +0500

Final-Recipient: rfc822; bob@invalid.com
Original-Recipient: rfc822; bob@invalid.com
Action: failed
Status: 5.1.1
Diagnostic-Code: smtp; 550 5.1.1 <bob@invalid.com>: Recipient address rejected: User unknown

--=_bounce_boundary
Content-Type: message/rfc822

[оригинальное письмо целиком или заголовки]

--=_bounce_boundary--

Enhanced Mail System Status Codes

Формат class.subject.detail (RFC 3463).

Class (первая цифра)

ClassЗначение
2.X.XSuccess
4.X.XPersistent Transient — временная проблема, попробуй позже
5.X.XPermanent Failure — не получится никогда

Subject (вторая цифра)

X.0.XOther/Undefined
X.1.XAddressing problems
X.2.XMailbox problems
X.3.XSystem problems
X.4.XNetwork / routing
X.5.XMail delivery protocol
X.6.XContent / media
X.7.XSecurity / policy

Частые коды

КодЗначение
2.0.0Success
4.2.2Mailbox full (retry позже)
4.4.7Timeout / message expired in queue
4.7.0Temporary security policy failure (greylist)
5.1.1Bad destination mailbox — no such user
5.1.2Bad destination system — no such domain
5.2.1Mailbox disabled
5.2.2Mailbox full (permanent)
5.4.1No answer from host
5.4.4Unable to route
5.7.1Delivery not authorized (blocked by policy)
5.7.26Message not accepted by SPF/DKIM/DMARC
5.7.27Sender-address rejected

Hard bounce vs Soft bounce

Backscatter

Классическая ошибка старых серверов: сервер принимает все письма, а bounce'ит потом когда обнаружит что получателя не существует. Проблема: envelope-from может быть подделан (спам), и bounce полетит к невиновному человеку → «backscatter».

Правильно: отклонять неизвестных получателей сразу при SMTP-сессии (recipient validation) — 550 сразу, а не bounce потом.

Bounce management

При массовых рассылках нужно обрабатывать bounces:

  1. Envelope-from = VERP (Variable Envelope Return Path): bounce+alice=example.com@yourlist.com. Bounce придёт по этому адресу — сразу знаешь чей.
  2. Парсишь DSN, извлекаешь Status-код.
  3. Hard bounce → unsubscribe адрес.
  4. Soft bounce → счётчик, после N раз → unsubscribe.

SendGrid / Mailgun / Postmark

ESP (Email Service Providers) вешают это на себя: показывают статистику bounces, автоматически удаляют hard-bounce адреса из списков.

NDR vs DSN

NDR (Non-Delivery Report) — Microsoft-термин для DSN. Тот же самый формат по сути. Иногда чуть иначе оформлен в Exchange/Outlook.

См. также