Сайт не отправляет письма: как проверить SMTP, почтовые события и DNS домена

Ситуация «форма отправилась, но письмо не пришло» может возникнуть на нескольких уровнях. Сайт мог не сформировать почтовое событие, PHP не передал сообщение почтовому серверу, SMTP отклонил авторизацию, а получатель — поместил письмо в спам из-за проблем с DNS домена.
Поэтому проверять отправку почты нужно последовательно, а не менять сразу адрес отправителя, SMTP и DNS-записи.
Первый вопрос: сайт вообще создал письмо?
Если используется CMS, сначала проверяют саму бизнес-логику: создалось ли почтовое событие, выбран ли нужный почтовый шаблон, корректны ли поля получателя и отправителя. Ошибка на этом уровне означает, что до SMTP письмо вообще не дошло.
Следующий уровень — механизм отправки
Сайт может отправлять почту через локальный sendmail, SMTP-модуль или внешний почтовый сервис. Нужно точно понимать, какой механизм используется в конкретном проекте. Иначе тест одной функции покажет успех, а реальные письма будут уходить совершенно другим способом.
Что проверить в SMTP
- адрес SMTP-сервера и порт;
- тип шифрования;
- логин и пароль;
- разрешён ли указанный адрес From;
- нет ли сетевой блокировки исходящего соединения;
- что отвечает сервер при реальной попытке отправки.
Почему письма могут отправляться, но не доходить
Успешная передача на SMTP не гарантирует попадание во входящие. Дальше работают антиспам-фильтры получателя. Для доменной почты важны SPF, DKIM и DMARC, согласованность адреса отправителя и репутация сервера.
Если DNS-записи только что менялись, нужно учитывать время их распространения. В этот период разные почтовые серверы могут видеть старые и новые значения.
Не подменяйте диагностику повторной отправкой
Когда письмо не дошло, полезнее найти запись в журнале и ответ SMTP, чем нажимать «отправить ещё раз» десятки раз. Повторная отправка без понимания причины может привести к дублям, а исходная ошибка останется неизвестной.
Какие журналы нужны
- журнал почтовых событий CMS;
- лог SMTP или почтового модуля;
- системный mail log, если используется локальный MTA;
- ошибки PHP для кода, который формирует сообщение;
- ответ внешнего почтового сервиса.
Проверяйте письмо целиком
Иногда проблема появляется только у конкретного шаблона: неправильный From, пустой To, слишком большое вложение или некорректный заголовок. Поэтому технический тест «mail() возвращает true» полезен, но не заменяет отправку того же типа письма, который не работает у пользователя.
Почтовая проблема считается найденной только тогда, когда понятен уровень сбоя: приложение, отправляющий сервер, DNS или принимающая сторона.
Практический порядок проверки
- Убедиться, что приложение создало событие и получателя.
- Определить реальный механизм отправки.
- Проверить ответ SMTP или локального почтового сервера.
- Проверить SPF, DKIM и DMARC домена.
- Посмотреть папку спам и технические заголовки полученного тестового письма.
- После исправления выполнить контрольную отправку тем же шаблоном.
Если проблема с почтой появилась одновременно с переносом сайта, дополнительно проверьте настройки нового сервера. Общий процесс переноса описан в статье о переносе сайта без длительного простоя.
Диагностика форм, SMTP, почтовых шаблонов и DNS входит в задачи технической поддержки сайта.