Письма с сайта уходят в спам: что проверить в DNS и SMTP
Иногда форма на сайте работает правильно: пользователь заполнил поля, backend принял данные, mailer вернул true. Но письмо всё равно попало в спам или не дошло до менеджера. В такой ситуации проблема уже не в HTML-форме, а в доставляемости почты.
Доставляемость зависит от SMTP, адреса отправителя, DNS-записей домена, содержимого письма и репутации сервера. Проверять лучше по порядку, без замены всего почтового сервиса в первый же час.
Отправитель должен быть доменным
Плохая практика — отправлять письмо от адреса, который ввёл пользователь. Например, посетитель указал gmail.com, а сайт пытается отправить письмо как будто от этого адреса. Почтовые серверы часто воспринимают это как подделку.
Лучше использовать доменный адрес сайта как отправителя, а email пользователя ставить в Reply-To.
Yii::$app->mailer
->compose()
->setFrom(['no-reply@example.ru' => 'Форма сайта'])
->setReplyTo($model->email)
->setTo('manager@example.ru')
->setSubject('Новая заявка с сайта')
->setTextBody($text)
->send();
SMTP вместо mail()
Функция mail() может сработать технически, но письмо часто выглядит менее доверенным для получателя. Для рабочих форм обычно лучше использовать SMTP с авторизацией.
'mailer' => [
'class' => 'yii\swiftmailer\Mailer',
'useFileTransport' => false,
'transport' => [
'class' => 'Swift_SmtpTransport',
'host' => 'smtp.example.ru',
'username' => 'no-reply@example.ru',
'password' => 'password',
'port' => 465,
'encryption' => 'ssl',
],
],
Отдельно стоит проверить, что useFileTransport выключен на production. Иначе письма будут складываться в runtime/mail и никуда не уходить.
SPF
SPF показывает, какие серверы имеют право отправлять письма от имени домена. Если сайт отправляет через внешний SMTP, домен должен разрешать этот сервис в SPF-записи.
example.ru. TXT "v=spf1 include:_spf.example-mail.ru ~all"
Если письма отправляются с сервера сайта, SPF должен учитывать его IP. Но часто лучше не отправлять напрямую с web-сервера, а использовать нормальный почтовый сервис.
DKIM
DKIM подписывает письмо криптографической подписью. Получатель может проверить, что письмо действительно связано с доменом отправителя и не было изменено по дороге.
Обычно DKIM-запись выдаёт почтовый сервис. Её нужно добавить в DNS домена. После добавления важно дождаться обновления DNS и проверить, что сервис видит запись.
DMARC
DMARC задаёт правило обработки писем, которые не прошли SPF или DKIM. Начинать лучше с мягкой политики, чтобы не заблокировать рабочую почту случайной ошибкой.
_dmarc.example.ru. TXT "v=DMARC1; p=none; rua=mailto:dmarc@example.ru"
После настройки и проверки можно ужесточать политику, но делать это нужно осознанно. Для небольшого сайта главное — чтобы SPF и DKIM были настроены корректно.
Содержимое письма
Даже при правильном SMTP письмо может попасть в спам из-за содержания. Подозрительно выглядят пустые темы, много ссылок, агрессивные слова, вложения без необходимости, HTML без текстовой версии.
- понятная тема письма;
- доменный отправитель;
- короткий текст без лишней рекламы;
- без подозрительных вложений;
- текстовая версия или простой HTML;
- Reply-To с email пользователя.
Логи отправки
Mailer может вернуть true, но это не гарантирует доставку в ящик. Это значит, что письмо передано SMTP-серверу. Для диагностики нужно смотреть ответ SMTP и логи почтового сервиса.
Yii::info([
'to' => 'manager@example.ru',
'from' => 'no-reply@example.ru',
'subject' => 'Новая заявка с сайта',
], 'mail');
Если SMTP возвращает ошибку авторизации, блокировку порта или отказ получателя, это обычно видно в логах приложения или панели почтового сервиса.
Проверка DNS
DNS-записи можно проверить командами:
dig example.ru TXT
dig _dmarc.example.ru TXT
dig selector._domainkey.example.ru TXT
selector для DKIM зависит от почтового сервиса. Его нельзя угадать, нужно брать из настроек конкретного сервиса.
Короткий чек-лист
- Отправитель письма — доменный адрес.
- Email пользователя стоит в Reply-To, а не в From.
- На production выключен useFileTransport.
- Письма отправляются через SMTP с авторизацией.
- SPF разрешает выбранный SMTP-сервис.
- DKIM добавлен и проходит проверку.
- DMARC настроен хотя бы в мягком режиме.
- Тема и текст письма выглядят нормально.
- Проверены спам, логи SMTP и почтового сервиса.
Проблемы со спамом редко решаются одной строкой кода. Код должен правильно сформировать письмо, SMTP — принять его, DNS — подтвердить доверие к домену, а содержимое — не выглядеть подозрительно. Проверять нужно всю цепочку.
Комментарии (0)
Пока нет комментариев. Будьте первым!