uCheckeruChecker

SMTP-коды ответов: справочник с разбором

SMTP-коды ответов - трёхзначные числа, которые почтовый сервер возвращает после каждой команды клиента. Код сообщает, была ли команда выполнена, требуются ли дополнительные данные, произошла ли ошибка и какого характера. Для любого, кто занимается отправкой email, понимание этих кодов - обязательный навык: они объясняют, почему письмо не доставлено, задержано или отклонено.

Структура трёхзначного кода

Каждый код определён в RFC 5321. Первая цифра задаёт класс ответа:

  • 2xx - успех. Команда принята и выполнена. Можно продолжать.
  • 3xx - промежуточный ответ. Сервер ожидает дополнительных данных от клиента.
  • 4xx - временная ошибка. Команда не выполнена, но проблема может исчезнуть. Стоит повторить через некоторое время.
  • 5xx - постоянная ошибка. Повторять бессмысленно. Нужно устранять причину.

Вторая цифра указывает категорию: 0 - синтаксис, 1 - информация, 2 - соединение, 5 - почтовая система. Третья цифра детализирует конкретную ситуацию внутри категории.

Коды 2xx: успех

  • 220 - сервер готов принять соединение. Первый ответ при подключении к SMTP-порту. Обычно включает имя хоста и версию ПО.
  • 221 - сервер закрывает соединение. Штатный ответ на команду QUIT.
  • 235 - аутентификация прошла успешно. Возвращается после передачи корректных учётных данных через AUTH.
  • 250 - команда выполнена. Самый частый код. Возвращается после EHLO, MAIL FROM, RCPT TO (если адрес принят), завершения DATA. При валидации email код 250 на RCPT TO означает, что сервер готов принять письмо на указанный адрес.
  • 251 - получатель не локальный, но сервер примет и перешлёт (forwarding).
  • 252 - сервер не может проверить пользователя, но попробует доставить. Часто встречается на серверах, скрывающих информацию о существовании ящиков.

Коды 3xx: промежуточные

  • 334 - сервер ожидает продолжения аутентификации. При AUTH LOGIN сервер запрашивает поочерёдно логин (base64) и пароль (base64).
  • 354 - сервер готов принять тело письма. Ответ на команду DATA. Клиент начинает передачу заголовков и тела, завершая строкой, содержащей только точку.

Коды 4xx: временные ошибки

Временные ошибки (soft bounce) означают, что доставка может пройти при повторной попытке. MTA помещает письмо в очередь и пробует снова через нарастающие интервалы.

  • 421 - сервер временно недоступен. Причины: перезагрузка, обслуживание, слишком много одновременных подключений, rate limiting.
  • 450 - ящик недоступен. Частая причина - greylisting: сервер намеренно отклоняет первое соединение от незнакомого отправителя, ожидая повторной попытки через 5-15 минут.
  • 451 - ошибка обработки на стороне сервера. Внутренний сбой, проблема с фильтрацией, ошибка DNS-запроса. Повторить позже.
  • 452 - недостаточно ресурсов. Ящик переполнен или на сервере закончилось дисковое пространство.
  • 455 - сервер не может принять параметры. Используется реже, обычно при проблемах с расширениями ESMTP.

Коды 5xx: постоянные ошибки

Постоянные ошибки (hard bounce) означают, что повторная попытка не поможет. Адрес нужно удалить из базы или исправить проблему на стороне отправителя.

  • 550 - ящик не существует или недоступен. Самый частый код bounce. Также возвращается при блокировке по политике: «550 Message rejected due to DMARC policy» или «550 High spam score».
  • 551 - получатель не локальный, пересылка не предусмотрена.
  • 552 - превышен лимит хранилища получателя. В отличие от 452, это постоянная проблема - ящик заброшен или владелец не освобождает место.
  • 553 - недопустимый формат адреса. Синтаксическая ошибка в имени получателя.
  • 554 - транзакция отклонена. Общий код отказа. Часто сопровождается пояснением: «554 Your IP is blacklisted», «554 Rejected by content filter».

Расширенные коды (Enhanced Status Codes)

RFC 3463 дополнил базовые трёхзначные коды расширенными в формате X.Y.Z. Они передаются в текстовой части ответа и дают детализированную информацию:

  • 5.1.1 - адрес получателя не существует. Классический hard bounce.
  • 5.1.2 - домен получателя не существует. Нет MX и A-записей.
  • 5.2.2 - ящик переполнен.
  • 5.7.1 - отклонено по политике безопасности (SPF, DKIM, DMARC, content filter).
  • 5.7.26 - нарушение DMARC-политики домена отправителя.
  • 4.7.1 - временный отказ по подозрению в спаме. Повторная попытка может пройти, если IP не в чёрном списке.
  • 4.2.1 - ящик временно отключён или заблокирован.

Текстовая часть ответа

Помимо числового кода, сервер возвращает текстовое пояснение. Формат не стандартизирован - каждый MTA формулирует по-своему. Примеры:

  • 550 5.1.1 The email account that you tried to reach does not exist (Gmail)
  • 550 Requested action not taken: mailbox unavailable (общий)
  • 421 4.7.0 Try again later, closing connection (Yahoo)
  • 554 5.7.1 Service unavailable; Client host blocked (Outlook)

Текстовая часть содержит ценную информацию для диагностики. При разборе bounce-уведомлений анализируйте и числовой код, и текст.

SMTP-коды и валидация email

При SMTP-верификации адресов валидатор подключается к MX-серверу, отправляет EHLO, MAIL FROM и RCPT TO, но не передаёт тело письма. По коду ответа на RCPT TO определяется статус адреса:

  • 250 - сервер готов принять письмо. Адрес, скорее всего, существует.
  • 550 - ящик не найден. Адрес невалиден.
  • 450/451 - временный отказ. Требуется повторная проверка.
  • 252 - сервер не подтверждает существование, но попробует доставить. Неопределённый результат.

Коды не всегда надёжны. Catch-all домены возвращают 250 на любой адрес. Некоторые серверы принимают на RCPT TO, но генерируют bounce после DATA. Профессиональные валидаторы используют SMTP-ответы как один из сигналов в комплексной проверке.

uChecker анализирует SMTP-коды ответов в сочетании с DNS-проверками, определением catch-all, анализом домена и дополнительными сигналами. Результат - не голый код сервера, а взвешенная оценка валидности каждого адреса.

SMTP-кодыbounceкоды ответовдиагностикадоставляемостьИнфраструктура
← Глоссарий