Полезное

Ошибки и баунсы в SMTP

Группы ошибок, политика ретраев, где смотреть в личном кабинете и как «читать» ошибки

Что такое bounce и ошибки недоставки

Bounce (баунс, отлуп, отскок) — ответ почтового сервера о том, что письмо не доставлено получателю. В логах и отчётах он выглядит как SMTP-код и текстовое сообщение.
Например: 550 Spam Message Rejected или 451 Ratelimit exceeded for mailbox.
Ошибка может появиться на разных этапах:
  1. До приёма письма сервером — например, адрес в стоп-листе (550 bounced check filter).
  2. При доставке на сервер получателя — ответ receiver-MTA: временная ошибка 4xx или постоянная 5xx.
Принцип работы SMTP описан в RFC 5321.

Общая логика кодов SMTP описана в глоссарии Mailganer.

Разбор bounce-ответов — в справочнике ошибок недоставки.

Группы ошибок: soft bounce и hard bounce

Определяются по первой цифре SMTP-кода. Ошибки делятся на временные и постоянные.
Тип
Код
Название
Что означает
Повторная доставка
Soft bounce
4xx
Временная ошибка
Сервер получателя временно не принял письмо (перегрузка, лимит, ящик переполнен)
Да — ретраи по политике
Hard bounce
5xx
Постоянная ошибка
Адрес не существует, письмо отклонено политикой, спам и т. п.
Нет — повтор бессмысленен
Важно: не все провайдеры строго следуют RFC. Например, переполненный ящик у большинства сервисов — 452, а у Яндекса встречается 552 5.2.2 Mailbox size limit exceeded. Смотрите полный текст ответа в логе, а не только цифру.
4xx — попробуем ещё, 5xx — доставка невозможна
Soft bounce не означает «письмо потеряно навсегда». Hard bounce означает, что на этот адрес не стоит слать повторно без исправления причины.

Справочник ошибок недоставки
На заметку: DSN (Delivery Status Notification) — стандартный отчёт почтового сервера о статусе доставки: письмо доставлено, задержано или отклонено. В логах и разделе «Недоставки» вы чаще видите его как bounce / отлуп — с кодом вроде 550 и расширенным статусом 5.1.1.

Коротко: SMTP-код (550) и поле Status (5.1.1) — разные вещи; для разбора удобнее смотреть оба. Soft bounce обычно начинается с 4, hard — с 5.

Подробнее о DSN — в глоссарии Mailganer

Иногда после серии баунсов система шлёт не обычный отлуп, а bounce probe — пробное письмо, чтобы проверить, жив ли ещё адрес.

Подробнее: что такое bounce probe

Как Sam Otpravil обрабатывает баунсы

Кратко о цепочке доставки:

  1. Приём письма. Если адрес в стоп-листе, сервер сразу вернёт 550 bounced check filter — письмо не уйдёт на доставку. Подробнее: стоп-листы SMTP.
  2. Передача на сервер получателя. Если сервер ответил 4xx, включается политика ретраев (см. ниже).
  3. Постоянная недоставка (5xx) или исчерпание ретраев по 4xx — письмо попадает в отчёт «Недоставки» в личном кабинете SMTP. Адрес может быть добавлен в стоп-лист; для софт-баунса в ответе указывается ttl_date — дата выхода из стоп-листа.
  4. Уведомления. О событиях недоставки можно получать через вебхуки или смотреть в логах отправки.
Статус Completed в истории отправок означает, что письмо принято и отправлено с нашего сервера. Ответ сервера получателя: 250 OK — доставлено, иначе — код ошибки.

Если письмо не было доставлено: с чего начать

  1. Откройте Отправки или Недоставки в личном кабинете и скопируйте полный ответ сервера.
  2. Определите тип: 4xx (временно, были ретраи до 24 ч) или 5xx (постоянно).
  3. Если ошибка 550 bounced check filter — проверьте Стоп-листы и ttl_date.
  4. Если код из справочника /bounce — откройте соответствующую страницу.
  5. Если ошибка про лимит Gmail / Яндекс / Mail.ru — см. таблицу статей выше.
  6. Проверьте SPF, DKIM, DMARC и репутацию домена — см. технически идеальное письмо.
  7. Неясно — поддержка с email, датой и текстом ошибки.

Политика ретраев при временных
ошибках 4xx

Если сервер получателя временно недоступен или отвечает ошибкой класса 4xx, система автоматически выполняет повторные попытки доставки письма по следующему алгоритму:

Первые 2 часа — повторные попытки каждые 5 минут.
Следующие 16 часов — интервал постепенно увеличивается: старт 5 минут, коэффициент 1.1.
Оставшееся время до 24 часов — повторные попытки каждые 6 часов.

Если в течение всего периода сервер получателя продолжает возвращать временную ошибку 4xx, письмо остаётся в очереди ретраев максимум 24 часа, после чего доставка считается неуспешной.
Ретраи только для 4xx
На ошибки 5xx эта политика не распространяется — это постоянный отказ = невозможность доставить письмо.

ttl_date: что происходит после софт-баунса

После неудачной доставки из-за временной ошибки адрес может попасть в стоп-лист. В ответе сервера и в личном кабинете для таких случаев указывается параметр `ttl_date` — дата, когда адрес снова станет доступен для отправки.

  • Если выход из стоп-листа невозможен, в ответе будет `ttl_date: 0`.
  • Обычно с ttl_date ничего делать не нужно: после даты адрес автоматически вернётся в отправки.

Где смотреть ошибки недоставки

  1. Личный кабинет SMTP → Недоставки — отчёт за период с текстом ошибки по каждому адресу. Обзор разделов
  2. Личный кабинет SMTP → Отправки — история по message id, статусы и полный лог SMTP-сессии (кнопка «Показать»).
  3. Личный кабинет SMTP → Стоп-листы — поиск адреса, причина, ttl_date. Стоп-листы SMTP
  4. Вебхуки — автоматическое оповещение о недоставке. Вебхуки в SMTP
  5. API — документация
Если код ошибки непонятен — напишите в поддержку с email получателя, датой отправки и полным текстом ответа сервера.

Справочник: статьи по конкретным ошибкам

Ниже — ссылки на разборы по провайдерам и типовым кодам.

Лимиты и политики почтовых провайдеров (блог)
Ошибка / тема
Статья
Gmail: суточный лимит отправки
Яндекс: policy rejection
Mail.ru: лимит за час
Mail.ru: нет доступа к SMTP на тарифе
Справочник bounce-кодов (раздел /bounce)
Код / тема
Страница
Все ошибки
550 Spam Message Rejected
550 5.7.1 Blocked by SpamAssassin
550 From address violates UsernameCaseMapped policy
550 5.7.0 Message rejected (спам)
SaM oTPravil: настройки и доставляемость
Тема
Статья
Стоп-листы, 550 bounced check filter
Интеграция, ttl_date, очереди
Техническая гигиена письма
Срок хранения логов
Напишите в поддержку, если нужна помощь с разбором ошибки недоставки