Проверка SMTP-сервера: релей, STARTTLS и сертификат
Соединяемся с почтовым сервером так же, как это делает другой почтовый сервер, и показываем, что он отвечает: приветствие, поддержку STARTTLS, сертификат, совпадение обратной зоны и готовность возить чужую почту.
Инструмент недавно запущен. Проверок сколько угодно, регистрация не нужна, платы нет. Если результат выглядит неправильно — напишите нам, это самый полезный отзыв на этом этапе.
Что здесь на самом деле происходит
Открывается тот же разговор, который открыл бы любой другой почтовый сервер. Соединиться, прочитать приветствие, поздороваться, посмотреть на объявленные возможности и, если сервер предлагает шифрование, поднять его и рассмотреть сертификат.
Ни одного письма при этом не отправляется. Разговор прерывается до команды, которая понесла бы содержимое, а после проверки на релей идёт сброс, а не текст. Вы видите ровно то, что видит принимающий сервер в первую секунду попытки доставки.
Три имени, которые обязаны сойтись
Эта находка удивляет чаще прочих, потому что не имеет отношения к записям, на которые был потрачен вечер.
Когда сервер соединяется, получатель знает наверняка одно: адрес, с которого пришло соединение. Он разрешает этот адрес в обратной зоне, получает имя и разрешает имя вперёд, чтобы увидеть, ведёт ли оно обратно. И то и другое он сверяет с именем, которым отправитель назвался в HELO. Три значения, и предполагается, что они описывают одну машину.
- PTR нет вовсе — изрядная часть получателей отклоняет соединение сразу, до всякой аутентификации.
- PTR есть, но не разрешается обратно — направить имя на адрес может кто угодно, а обратную запись делает только владелец адреса. Если прямой запрос не возвращает тот же адрес, имя ничего не подтверждает.
- HELO расходится с PTR — обычный результат настройки по умолчанию, когда сервер объявляет внутреннее имя вроде
localhost.localdomainили идентификатор контейнера.
Привести это в порядок несложно: одна запись PTR у владельца адреса, одно имя в конфигурации почтового сервера и A-запись, связывающая их. Сложность в том, что со стороны DNS-проверок этого не видно, и потому оно переживает множество в остальном аккуратных настроек.
Шифрование и что должен уметь сертификат
Почта между серверами использует оппортунистический TLS: отправитель спрашивает, доступно ли шифрование, и пользуется им, если доступно. Сертификат при этом обычно не проверяется, поэтому самоподписанные сертификаты изо дня в день возят почту без единой жалобы.
Меняют дело две вещи. Опубликованная политика MTA-STS велит отправителям требовать TLS с действительным и совпадающим сертификатом и отказываться от доставки, а не откатываться на открытый канал: сертификат, который вчера всех устраивал, начинает отбивать почту. И с 2024 года Gmail и Yahoo требуют от массовых отправителей передачи по TLS вообще.
Дату истечения стоит внести в календарь по той же причине. Просроченный сертификат на обычном веб-сервере даёт предупреждение, которое можно пролистать. На почтовом сервере под MTA-STS он даёт тишину и почту, которая перестала приходить.
Открытый релей: редко и катастрофично
Релей, который возит почту кому угодно, находят в считанные дни после появления, а вскоре после этого адрес оказывается во всех блоклистах. В современном софте это редкость, потому что ни один актуальный почтовый сервер так не поставляется: такое появляется после правки конфигурации руками или разрешающего правила, добавленного ради решения проблемы с доставкой и забытого.
При проверке домена мы просим его почтовый сервер принять письмо от адреса, с которым он не связан, для домена, который он не обслуживает, и останавливаемся, ничего не отправив. Правильный сервер откажет. Сервер, который согласится, уже используется на стороне, независимо от того, заметил это кто-нибудь или нет.
Для конкретного хоста, вписанного в поле, эту проверку мы не делаем. Спрашивать произвольную машину, повезёт ли она чужую почту, неотличимо от сканирования, и расплачивался бы за это наш собственный адрес.
Как читать список возможностей
Сервер перечисляет, что поддерживает, в ответ на приветствие. Несколько строк оттуда стоит знать.
- STARTTLS — шифрование доступно. Его отсутствие на публичном почтовом сервере в 2026 году это настоящий пробел.
- SIZE — предельный размер письма, которое сервер примет. Стоит посмотреть, прежде чем винить в возврате фильтры.
- AUTH — предлагается авторизованная отправка. Ожидаемо на порту 587 и несколько необычно на 25.
- 8BITMIME и SMTPUTF8 — сервер работает с не-ASCII содержимым и международными адресами без перекодирования.
После согласования шифрования список часто меняется: многие серверы объявляют авторизацию только в защищённом канале. Мы повторяем приветствие после апгрейда и показываем то, что сервер говорит тогда, потому что именно на это и опирался бы настоящий отправитель.
Что такое SMTP relay
Релеем называют пересылку письма через сервер, который не отправитель и не получатель. Почта уходит от вас на промежуточный сервер, тот принимает её, смотрит, кому она адресована, и передаёт дальше, иногда через ещё одно звено, о котором ни отправитель, ни получатель не подозревают. Так устроена вся межсерверная доставка.
Слово встречается в трёх разных значениях, и путаница между ними стоит дорого. Есть relay как сам механизм пересылки. Есть SMTP relay как услуга, то есть внешний сервер, через который компания шлёт уведомления и рассылки, чтобы не поднимать собственный и не разбираться потом с прогревом адреса и репутацией. И есть open relay, сервер, готовый переслать что угодно от кого угодно. Первое это протокол, второе нормальная инфраструктура, третье авария.
Как закрыть open relay
Открытый релей находят автоматически, обычно за считанные дни после появления в сети. Дальше через него идёт спам, домен и адрес уезжают в блоклисты, а разгребать это приходится неделями.
Проверка выше показывает, открыт ли релей у вас: мы просим сервер принять письмо от постороннего адреса для постороннего получателя и останавливаемся, ничего не отправив. Ответ 250 означает, что сервер согласился, и это надо чинить сегодня.
Закрывается всё на стороне почтового сервера, а конкретная настройка зависит от того, что у вас стоит. В Postfix за это отвечает smtpd_relay_restrictions, куда добавляется reject_unauth_destination. В Exim пересылку ограничивает relay_to_domains. В Microsoft Exchange открытый релей чаще всего появляется не от злого умысла, а когда на коннекторе получения кому-то понадобилось разрешить анонимную отправку для сканера или принтера, и разрешение случайно распространилось наружу.
Принцип один. Сервер вправе принимать почту для своих доменов от кого угодно и от своих пользователей кому угодно, но не чужую почту чужим адресатам.
Настройка SMTP relay
Когда компания отправляет письма через внешний сервер, настройка сводится к трём вещам. Адрес и порт релея, обычно 587. Учётные данные, потому что релей без авторизации превращается в тот самый открытый. И SPF-запись, в которую внесён отправляющий сервер, иначе получатели сочтут письмо подделкой.
Отдельно проверьте, не переписывает ли релей адрес отправителя. Некоторые провайдеры подменяют его на технический адрес своей инфраструктуры, и тогда DKIM-подпись перестаёт сходиться с доменом в поле From, выравнивание ломается, а DMARC отклоняет письмо, которое во всём остальном настроено правильно.
Сертификат S/MIME и сертификат сервера
Их регулярно путают, хотя задачи у них разные.
Сертификат почтового сервера участвует в STARTTLS и шифрует канал между серверами. Именно его показывает проверка выше. Содержимое письма при этом остаётся открытым для обоих серверов, шифруется только дорога.
Сертификат S/MIME принадлежит человеку, а не машине, и подписывает или шифрует само письмо. Получатель видит подпись конкретного человека, а зашифрованное таким образом письмо не прочитает ни промежуточный узел, ни почтовый сервер получателя, ни администратор с полным доступом к ящику. Выдают такой сертификат удостоверяющие центры на конкретный адрес, а ставится он в почтовый клиент.
Про S/MIME эта проверка ничего не скажет: она смотрит транспорт, а не содержимое.
Коды ошибок SMTP: что означает каждый и что чинить
Почтовый сервер отвечает на каждую команду трёхзначным кодом. Первая цифра говорит главное: 2 означает успех, 4 временный отказ, 5 постоянный. Разница между четвёркой и пятёркой важнее самого кода, потому что при 4xx отправитель повторит попытку сам, а при 5xx письмо не уйдёт никогда.
Рядом с кодом часто стоит расширенный, из трёх чисел через точку, вроде 5.7.1. Он уточняет причину и обычно информативнее основного. И почти всегда после кода идёт текст, который сервер написал своими словами: читать нужно именно его, потому что один и тот же код разные серверы дают по разным поводам.
550: ящик не существует или отправитель отклонён
Самый частый постоянный отказ, и у него два разных смысла. Если в тексте упоминается user unknown, no such user или mailbox unavailable, адреса действительно нет, и это hard bounce. Такой адрес надо удалять из базы навсегда, а не пробовать снова.
Второй смысл встречается не реже: сервер отклонил не адрес, а вас. Формулировки вроде access denied, blocked или policy rejection означают, что получателю не понравился отправитель. Причины по частоте: домен или адрес в блоклисте, отсутствие PTR-записи, непройденная аутентификация. Проверьте адрес по чёрным спискам и посмотрите, спискам и посмотрите, что отвечает ваш сервер на приветствие.
Отдельно про 550 5.7.1. Это отказ по политике, и чаще всего он означает отказ пересылать чужую почту либо срабатывание DMARC. Если письма шли нормально и вдруг перестали, начните с проверки записей домена.
535: неверные учётные данные
Ошибка авторизации, и она про отправку, а не про доставку. Сервер не принял логин или пароль при попытке отправить через него письмо.
Причины прозаические. Пароль изменили, а в почтовом клиенте оставили старый. Провайдер требует пароль приложения вместо основного, как это делают Яндекс, Mail.ru и Gmail при включённой двухфакторной аутентификации. Либо используется не тот порт: авторизованная отправка живёт на 587 или 465, а не на 25.
554: транзакция отклонена
Общий отказ на уровне всей транзакции. Часто приходит вместе с текстом про спам или репутацию, и тогда это разновидность блокировки. Иногда так отвечает сервер, которого попросили переслать письмо на чужой домен, то есть правильно работающая защита от открытого релея.
552: превышен размер
Письмо больше, чем принимает сервер получателя. Смотрите, что объявляет сервер в ответ на приветствие: значение SIZE и есть предел. Вложения в письме кодируются base64 и прибавляют около трети к исходному объёму, так что файл на 20 мегабайт в письме весит около 27.
450, 451 и 452: временные сбои
Обе цифры означают «попробуйте позже», и отправитель повторит попытку сам. Чаще всего за ними стоит greylisting: сервер намеренно отклоняет первое письмо с незнакомого адреса и принимает при повторе через несколько минут. Разовое появление игнорируется, повторяющееся на одном и том же получателе означает, что повторов он не дожидается.
Код 452 стоит особняком: он означает, что у получателя не хватает места либо в одном письме слишком много адресатов. При массовой отправке это чаще второе, и лечится уменьшением числа получателей в одной транзакции.
421: сервис недоступен
Сервер закрывает соединение: перегружен, на обслуживании либо счёл темп отправки слишком высоким. Это тоже временный код, но при массовой рассылке он сигнализирует о лимитах на стороне получателя, и объём стоит снизить.
Расширенные коды, которые встречаются чаще прочих
5.1.1 означает, что почтового ящика не существует. Это тот же hard bounce, что и текстовое user unknown.
5.7.1 это отказ по политике. Универсальная формулировка, за которой стоит блоклист, неаутентифицированный отправитель или запрет пересылки.
5.7.8 означает, что авторизация не удалась. Близко к 535, но приходит на этапе проверки прав, а не логина.
4.7.0 и 4.7.1 это временные отказы по политике, обычно greylisting или превышение лимита частоты.
Что означают тексты из отбойников
Когда письмо не доходит, отправитель получает автоответ с формулировкой, которую писал не человек, а почтовый сервер. Ниже разобраны те, что чаще всего приходят от российских провайдеров.
Организация отклонила сообщение
Формулировка Mail.ru, и означает она отказ принимающей стороны, а не проблему с адресом. Ящик существует. Сервер просто решил письмо не брать. За этим стоит одно из трёх: отправитель в блоклисте, не прошла аутентификация, либо сработала политика DMARC вашего домена.
Вариант «организация mxs mail ru отклонила сообщение» и «организация emx mail ru отклонила сообщение» это то же самое, просто с именем конкретного узла, который вынес решение. Для диагностики разницы нет.
Начинайте с проверки записей домена и адреса по блоклистам. В отбойнике почти всегда есть строка с кодом, и она говорит больше, чем сама формулировка.
Что значит сообщение отклонено
Отклонено значит, что сервер получателя ответил отказом до приёма письма. Это не потеря в пути и не спам-фильтр, сработавший после доставки. Письмо не легло ни в одну папку, получатель его не увидит и никогда не узнает, что оно было.
Отличать это надо от попадания в спам. Если письмо отклонено, вам придёт отбойник. Если оно ушло в спам, отбойника не будет, и внешне всё выглядит успешной отправкой.
Почему сообщение отклонено и сообщение отклонено адресатом
Формулировка «отклонено адресатом» вводит в заблуждение: адресат тут не человек, а его почтовая система. Решение принято автоматически. До того, как письмо кто-то увидел.
Причины по частоте: репутация отправляющего адреса, отсутствие или несовпадение PTR-записи, непройденные SPF и DKIM, срабатывание DMARC. Реже это переполненный ящик или ограничение на стороне организации.
Поставщик услуг получателя отклонил сообщение
Так пишет Яндекс, когда отказ пришёл не от конечного сервера, а от промежуточного, обслуживающего домен получателя. Смысл тот же. Решение принято на стороне приёма.
Некорректно настроена PTR-запись на домене отправителя
Единственная формулировка из списка, которая прямо называет причину. Обратная зона вашего IP-адреса либо не настроена, либо возвращает имя, которое не разрешается обратно в тот же адрес.
Чинится это не в DNS домена, а у владельца IP-адреса: хостера или провайдера. Проверить текущее состояние можно тестом выше, он показывает PTR вместе с именем из приветствия.
550 relay not permitted и relay access denied
Формулировки разнятся от сервера к серверу, смысл один. Строки smtp 550 relay not permitted, smtp relay not permitted и relay access denied говорят, что сервер отказался пересылать ваше письмо чужому адресату. Своим он вас не считает, получателя своим тоже.
Причин обычно три. Отправка идёт без авторизации, тогда включайте SMTP AUTH и порт 587 вместо 25. Логин прошёл, но у учётной записи нет права на релей, так бывает на хостингах с раздельными правами. Или ваш IP-адрес не попал в список разрешённых, и это самый частый случай при отправке из скрипта с нового сервера.
Обратная ситуация опаснее. Когда посторонний отправитель получает от вашего сервера 250 вместо отказа, у вас smtp open relay. Проверка выше делает ровно такой запрос и останавливается до передачи письма.
TLS-сертификат не прошёл проверку
TLS-проверка сертификата смотрит три вещи: срок действия, цепочку доверия до корневого центра и совпадение имени в сертификате с именем сервера. Сообщение «tls сертификат не прошёл проверку» приходит, когда не сошлось хотя бы одно.
Чаще всего виновато имя. Сертификат выписан на mail.example.com, а MX указывает на mx1.example.com, и формально это разные хосты. Второе по частоте это неполная цепочка, когда на сервер положили только конечный сертификат без промежуточного. Браузер такое иногда достраивает сам, почтовый сервер нет.
Просроченный сертификат встречается реже, но ломает всё сразу. Проверка выше показывает срок, эмитента и имена из SAN, так что видно, какая из трёх причин ваша.
Вопросы о SMTP
Читать дальше
Сервер настроен правильно, а письма всё равно отбиваются?
Безупречное рукопожатие не спасает, когда адрес получателя перестал существовать полгода назад. uChecker проверяет базу до отправки, первые 100 адресов бесплатно.
Проверить базу