Возвраты и отказы: разница между hard bounce и soft bounce
Возврат письма (bounce) означает, что сервер получателя отклонил сообщение или прислал отчет о недоставке. Hard bounce это постоянная ошибка с кодом 5xx, например несуществующий адрес, soft bounce временная с кодом 4xx, например переполненный ящик. Ниже разобрано, как читать коды в отчетах, почему растет bounce rate и как снизить возвраты в рассылках.
1. Что такое возврат письма
Возврат (bounce) происходит в двух формах. Первая: сервер получателя отклоняет письмо прямо в SMTP-сессии и возвращает числовой код ошибки вместо подтверждения. Вторая: письмо принято, но доставить его не удалось, и на адрес отправителя конверта приходит отчет о недоставке (delivery status notification) с исходным кодом внутри. Формат таких отчетов описан в RFC 3464, коды ответов SMTP в RFC 5321.
Возврат не равен попаданию в спам. В спаме письмо доставлено и лежит в папке "Спам", явного отчета об ошибке нет. Возврат это прямое указание: письмо не доставлено, причина названа. Поэтому разбор инцидента начинают с возвратов, а вопросы размещения в папках смотрят отдельно.
- •Отчеты о недоставке приходят на адрес из команды MAIL FROM конверта (Return-Path), а не на адрес в поле From, который видит получатель
- •Если этот ящик не существует или не читается, вы теряете всю диагностику возвратов
2. Hard bounce и soft bounce: разница
Разница определяется первой цифрой кода ответа. Коды, начинающиеся с 4, означают временный отказ: сервер просит повторить позже. Коды, начинающиеся с 5, означают постоянный: повтор по тому же пути ничего не изменит. Разделение задано в RFC 5321, расширенные коды статуса вида X.Y.Z описаны в RFC 3463.
| Hard bounce (5xx) | Soft bounce (4xx) |
|---|---|
| Постоянная причина: адреса нет, домен не принимает почту, письмо отклонено политикой | Временная причина: ящик переполнен, сервер занят, сработало ограничение скорости |
| Типичный код: 550 5.1.1, адрес получателя неизвестен | Типичные коды: 421, 450, 451 с текстом try again later |
| Повторная отправка по тому же адресу бессмысленна | Повторная отправка через 24-72 часа может пройти |
| Адрес исключают из базы после первой же ошибки | Адрес оставляют и наблюдают несколько кампаний, затем решают |
- ✕Не отправляйте повторно на адреса с hard bounce: это увеличивает долю ошибок и бесполезный трафик на несуществующие ящики
- ✕Soft bounce не повод удалять адрес: сначала разберите причину по коду
3. Расшифровка bounce email: где искать код
В структурированном отчете о недоставке ищите поле Diagnostic-Code. Внутри него базовый SMTP-код, расширенный код статуса и текст причины. Пример записи: Diagnostic-Code: smtp; 550 5.1.1 <user@example.com>: Recipient address rejected: User unknown in virtual mailbox table. Расширенный код читается так: первая цифра задает класс ошибки (4 временная, 5 постоянная), вторая указывает источник: 1 адрес, 2 ящик, 3 почтовая система, 4 сеть и маршрутизация, 5 протокол доставки почты, 6 содержимое или формат сообщения, 7 безопасность или политика.
Частые коды в рассылках на Gmail, Mail.ru, Яндекс и Outlook:
| Код и типичный текст ответа | Что означает и что делать |
|---|---|
| 550 5.1.1 The email account that you tried to reach does not exist | Ящика нет. Hard bounce: исключить адрес из базы. Такой текст возвращает Gmail |
| 550 5.1.2 bad destination system address | Домен получателя не принимает почту или не имеет рабочих MX. Hard bounce |
| 550 5.7.26, Gmail | Письмо не прошло ни SPF, ни DKIM: Gmail считает отправителя неаутентифицированным. Для отправителей от 5000 писем в день в Gmail требования жестче - нужны обе проверки одновременно и запись DMARC. Проблема в DNS и подписях, а не в адресе. Подробный разбор: [Gmail 550 5.7.26](/blog/gmail-550-5-7-26) |
| 550 5.7.1 Delivery not authorized, message refused | Отклонение политикой: спам-фильтр, репутация IP, черный список. Разбирать по домену получателя |
| 450 или 451 с текстом try again later | Временный отказ: серый список (greylisting), перегрузка, ограничение скорости. Повторить позже |
| 452 4.2.2 mailbox is over quota | Ящик переполнен. Именно такой временный код возвращает Gmail при переполнении - soft bounce, повторить через несколько дней. Формально по RFC 3463 существует и постоянный вариант 552 5.2.2, но у крупных почтовых провайдеров переполнение ящика в первую очередь означает 4xx с повтором, а не окончательный отказ |
Если отчет содержит заголовки исходного письма, разберите их в бесплатном анализаторе заголовков PostmastersTool: он покажет цепочку серверов и результаты проверок аутентификации.
4. Почему растет bounce rate: дерево диагностики
Одиночные возвраты это норма: ящики закрываются постоянно. Сигнал для разбора: рост доли возвратов от кампании к кампании или скачок после конкретного изменения. Диагностику удобно вести по шагам.
Шаг 1. Сгруппируйте возвраты по коду и домену получателя. Если отказы идут с одного домена (например, корпоративного на Microsoft 365), а остальные провайдеры принимают письма, проблема на стороне получателя или в отношении вашего IP, а не в базе.
Шаг 2. Массовые 5.1.1 и 5.1.2 указывают на проблему базы: старые адреса, опечатки при ручном вводе, купленный список, дубли после склейки источников.
Шаг 3. Массовые 5.7.1 и 5.7.26 указывают на аутентификацию и репутацию: сломанный SPF или DKIM после смены DNS или ESP, IP в черном списке. Порядок разбора таких отклонений у Microsoft описан в руководстве по аутентификации почты для SecOps.
Шаг 4. Массовые 421, 450, 451 указывают на темп и инфраструктуру: превышены лимиты провайдера, сервер получателя перегружен, объем выше прогретого уровня.
Шаг 5. Сверьте дату скачка с изменениями: новая платформа рассылок, смена селектора DKIM, новый поддомен, перенос DNS, крупное пополнение базы.
- ✕Смена ESP без обновления SPF и генерации DKIM: письма отклоняются кодами 5.7.x сразу после миграции
- ✕Проверьте записи вручную: dig TXT example.com +short для SPF, dig TXT selector._domainkey.example.com +short для DKIM, dig MX example.com +short для MX
5. Какой bounce rate считать высоким
Публичного лимита по доле возвратов у провайдеров нет, поэтому важнее динамика и структура, а не одно число. Рабочий ориентир для базы с подтвержденными согласиями: возвраты в пределах единиц процентов, причем основная часть должна приходиться на soft. На больших объемах считайте и абсолютные значения: 3% от 100 000 писем это три тысячи отправок на проблемные адреса за одну кампанию.
Считайте возвраты по каждой кампании отдельно и разбивайте по типу (hard или soft), по доменам получателей (gmail.com, mail.ru, yandex.ru, outlook.com) и по кодам. Скачок по одному провайдеру при стабильных остальных почти всегда указывает на политику или репутацию именно у него, а не на качество базы.
- ✕Для жалоб есть документированные пороги: Mail.ru допускает долю жалоб от 1,1% при объеме до 10 000 писем в месяц до 0,3% при объеме свыше 50 000 000
- ✕Gmail требует держать долю жалоб ниже 0,3% и рекомендует ниже 0,1%
- ✕Эти пороги относятся к жалобам, а не к возвратам
6. Как снизить возвраты писем
База. Включите подтверждение адреса при подписке (double opt-in): это отсекает опечатки и одноразовые ящики на входе. Там, где адрес вводится вручную (формы заявок, таблицы), добавьте проверку синтаксиса и список доменов-исключений вроде gmial.com.
Очистка. Адреса с hard bounce исключайте из отправок сразу после первой ошибки: через suppression list в платформе рассылок, а не простым удалением, чтобы адрес не вернулся при следующем импорте. Для soft bounce настройте две-три повторные попытки с интервалом в сутки-трое и исключайте адрес после серии неудач подряд.
Инфраструктура. После любых изменений в DNS проверяйте записи и тестируйте отправку: dig TXT example.com +short (SPF), dig TXT sel._domainkey.example.com +short (DKIM), dig MX example.com +short (MX). Новые домены и IP начинайте с малых объемов и наращивайте постепенно: превышение темпа проявляется как рост возвратов с кодами 4xx.
Мониторинг. Скачок возвратов раньше всего виден в метриках провайдеров: в кабинете Mail.ru Postmaster отражается изменение доли доставленных писем, в Google Postmaster Tools доли прохождения SPF, DKIM и DMARC. PostmastersTool собирает эти данные автоматически, ведет историю по дням и присылает уведомления при пересечении выбранных порогов в Telegram, на почту и другие каналы.
7. Как проверить результат
Сравните метрики по одинаковым сегментам до и после изменений: долю возвратов с разбивкой на hard и soft, долю доставленных в Mail.ru Postmaster, доли прохождения SPF, DKIM и DMARC в Google Postmaster Tools. Возьмите два-три свежих отчета о недоставке и убедитесь, что код изменился или возврат исчез.
Учитывайте ограничение: низкий bounce rate не гарантирует попадание в папку "Входящие". Сервер может принять письмо (SMTP accepted), а фильтр поместить его в спам; такие случаи в возвратах не видны и проверяются отдельно.
Историю проще вести в одном окне: в PostmastersTool статистика Google Postmaster Tools привязана к домену подписи DKIM (или к SPF-домену), а не к конкретному селектору, поэтому смена селектора эти ряды не обнуляет. Данные Mail.ru Postmaster привязаны к домену, подтвержденному в кабинете, и от DKIM-селектора не зависят вовсе. При переходе на новую платформу рассылок оба ряда сохраняются, если домен остается тем же.
Что сделать дальше
Три действия, с которых стоит начать разбор возвратов.
- 1Разобрать отчет о недоставке
Вставьте заголовки вернувшегося письма в анализатор и найдите Diagnostic-Code с точной причиной.
Открыть анализатор - 2Проверить домен
Проверьте SPF, DKIM, DMARC, MX и черные списки, если возвраты идут с кодами 5.7.x.
Проверить домен - 3Обсудить аудит
Если bounce rate растет без очевидной причины, аудит доставляемости покажет, где узкое место: база, DNS или инфраструктура.
Обсудить аудит