Черная дыра для лидов: почему не приходят письма с сайта и как настроить SMTP, SPF и DKIM в WordPress
Форма обратной связи на сайте показывает бодрую зеленую галочку «Ваше сообщение успешно отправлено», клиент спокойно ждет звонка, а менеджер в это время листает соцсети и думает, что трафик идет пустой. Через три дня выясняется, что пять горячих заявок осели в папке «Спам», а еще десяток почтовый сервер просто молча сбросил на входе без уведомления отправителя.
Классическая ситуация: разработчик собрал сайт, натянул верстку, прикрутил Contact Form 7 или WPForms и оставил отправку уведомлений на откуп дефолтной функции PHP mail(). В нулевых это работало. Сегодня почтовые сервисы закрутили гайки безопасности настолько, что любое письмо без подтверждения подлинности отправителя моментально летит в мусорную корзину.

Почему стандартный PHP mail() гарантирует спам
По умолчанию WordPress пытается отправлять сообщения силами самого веб-сервера через системный sendmail. У этого способа есть три фатальные проблемы:
- Отсутствие авторизации. Письмо формируется от системного пользователя вроде
www-data@server123.hosting-provider.ru. Почтовый провайдер получателя видит, что домен сайта заявляет одно имя, а физическая отправка идет с безымянного серверного демона. - Убитая репутация IP-адреса хостинга. На виртуальном (shared) хостинге на одном сервере живут сотни сайтов. Если хоть один из ваших «соседей» попался на рассылке серого спама или вирусов, IP сервера попадает в черные списки (Spamhaus, DNSBL). Ваши транзакционные уведомления пойдут на дно вместе с ним.
- Несовпадение заголовков. Форма отправляет письмо с адресом
From: info@vash-sait.ru, но реальный технический заголовокReturn-Pathуказывает на хостинг. Почтовые алгоритмы Яндекса, Gmail и Mail.ru расценивают такую подмену как фишинг.
Базовый фундамент: настраиваем SPF, DKIM и DMARC на DNS
Почтовый ящик не поверит письму с сайта, пока вы на уровне DNS-записей домена явно не скажете: «Да, этот сервер имеет право отправлять от меня почту». Для этого настраивается связка из трех записей:
- SPF (Sender Policy Framework). Простая текстовая TXT-запись, где перечисляются доверенные IP-адреса или почтовые сервера. Если вы отправляете почту через Яндекс 360, запись в DNS выглядит так:
v=spf1 include:_spf.yandex.net ~all. Символ~allуказывает почтовику отправлять неавторизованные письма в подозрительные (SoftFail), а-all— жестко отклонять их. - DKIM (DomainKeys Identified Mail). Электронная цифровая подпись. Сервер отправки подписывает каждое исходящее письмо закрытым ключом, а сервер получателя сверяет подпись с открытым ключом, который вы заранее прописали в TXT-запись DNS (обычно с селектором вроде
mail._domainkey). Без корректного DKIM современные спам-фильтры Gmail бракуют почту почти со стопроцентной вероятностью. - DMARC (Domain-based Message Authentication). Правило, диктующее почтовым серверам, как поступать с письмами, провалившими проверку SPF и DKIM. На старте в DNS вносится мягкая директива:
v=DMARC1; p=none; sp=none; rua=mailto:admin@vash-sait.ru. Позже, когда доставка стабилизируется, политикуp=noneпереводят в строгийp=quarantineилиp=reject.
Настройка SMTP в WordPress: пошаговый переход на внешний шлюз
Чтобы забыть про проблемы с доставкой, отправку писем нужно перевести на внешний SMTP-сервер с чистой репутацией — корпоративную почту домена (Яндекс 360, VK WorkSpace) либо специализированный транзакционный сервис (SendPulse, Brevo, SMTP2GO).
- Создаем технический ящик. Заведите на доменной почте отдельный адрес, например
noreply@vash-sait.ru. Обязательно сгенерируйте для него отдельный пароль приложения в настройках безопасности почтового сервиса, а не используйте основной пароль от аккаунта. - Выбираем плагин SMTP. Не перегружайте проект монструозными комбайнами с платной подпиской. Отлично справляются легкие и стабильные решения — FluentSMTP (полностью бесплатный, поддерживает детальные логи отправки) или проверенный WP Mail SMTP.
- Заполняем параметры подключения. В настройках плагина указываем:
- SMTP Host: например,
smtp.yandex.ru(или хост вашего сервиса); - Шифрование: SSL / TLS;
- SMTP Port: 465 (для SSL) или 587 (для STARTTLS);
- SMTP Username: полный адрес ящика
noreply@vash-sait.ru; - SMTP Password: сгенерированный пароль приложения.
- SMTP Host: например,
- Синхронизируем адрес отправителя. Поле
From Emailв плагине SMTP и адрес отправителя в настройках плагина форм (Contact Form 7, Elementor Forms) обязаны совпадать буква в букву с авторизованным логином ящика. Несовпадение адреса «От кого» — главная причина, почему плагины выдают ошибку при отправке.
Экспресс-диагностика: как протестировать доставляемость
После сохранения настроек обязательно проведите контрольную проверку, не дожидаясь первых потерянных клиентов:
- Тестовое письмо на mail-tester.com. Зайдите на сервис, скопируйте сгенерированный одноразовый ящик и отправьте на него письмо через тестовую вкладку в SMTP-плагине. Сервис разложит письмо по косточкам и выдаст оценку по шкале от 1 до 10. Если балл ниже 9 — смотрите, где просели SPF или DKIM.
- Анализ исходного кода письма. Отправьте заявку на личный ящик в Gmail, откройте письмо, нажмите «Еще» (три точки) -> «Показать оригинал». В сводке заголовков напротив SPF, DKIM и DMARC везде должен гореть зеленый статус
PASS. - Проверка логов отправки. Держите включенным логирование в FluentSMTP. Если форма на фронтенде отработала штатно, а письмо не дошло, лог сразу покажет точный ответ почтового сервера: неверный порт, отказ авторизации или блокировку по таймауту со стороны хостинга (некоторые хостинг-провайдеры блокируют исходящие порты 465/587, требуя разблокировки через тикет в техподдержку).
Потратить полчаса на делегирование отправки внешнему SMTP и прописку трех TXT-записей в DNS — базовая инженерная гигиена при разработке любого сайта. Это навсегда закрывает вопрос потерянных заявок и гарантирует, что каждый лид упадет в рабочую почту сейлза в течение нескольких секунд после клика по кнопке.
