Письма с сайта уходят в спам: что проверить в 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 зависит от почтового сервиса. Его нельзя угадать, нужно брать из настроек конкретного сервиса.

Короткий чек-лист

  1. Отправитель письма — доменный адрес.
  2. Email пользователя стоит в Reply-To, а не в From.
  3. На production выключен useFileTransport.
  4. Письма отправляются через SMTP с авторизацией.
  5. SPF разрешает выбранный SMTP-сервис.
  6. DKIM добавлен и проходит проверку.
  7. DMARC настроен хотя бы в мягком режиме.
  8. Тема и текст письма выглядят нормально.
  9. Проверены спам, логи SMTP и почтового сервиса.

Проблемы со спамом редко решаются одной строкой кода. Код должен правильно сформировать письмо, SMTP — принять его, DNS — подтвердить доверие к домену, а содержимое — не выглядеть подозрительно. Проверять нужно всю цепочку.

Комментарии (0)

Пока нет комментариев. Будьте первым!