Ситуация типичная: форма отправляется без ошибок, а письмо либо не приходит вообще, либо падает в спам, либо уходит только на один ящик. В Contact Form 7 это чаще всего не проблема самого плагина, а связка из нескольких факторов: неверный адрес отправителя, отсутствие SMTP, слабая DNS-настройка домена или конфликт с хостингом.
Ниже — практический разбор без лишней теории: как найти причину, что исправить в первую очередь и как проверить, что письмо действительно стало доставляться.
Как понять, где ломается отправка
Начинать стоит не с переустановки плагина, а с проверки цепочки отправки. В WordPress письмо из Contact Form 7 проходит через wp_mail(), а дальше уже зависит от сервера, SMTP-плагина и почтового сервиса. Если на одном этапе есть проблема, форма может показывать успех, но письмо не дойдет.
Что проверить в первую очередь
- какой адрес указан в поле
Fromв настройках письма формы; - совпадает ли домен отправителя с доменом сайта;
- используется ли SMTP, а не стандартная отправка через PHP mail;
- есть ли SPF, DKIM и DMARC для домена;
- не блокирует ли хостинг исходящую почту;
- не попадает ли письмо в спам из-за подмены адреса отправителя.
Самая частая ошибка — ставить в From личный ящик вроде gmail.com, а отправку делать с домена сайта. Многие почтовые сервисы это режут или помечают как подделку.
Диагностика проблемы в Contact Form 7
Откройте форму и посмотрите вкладку Почта. Для рабочей схемы лучше использовать адрес на вашем домене, например noreply@site.ru или form@site.ru. А реальный адрес получателя указывать в To.
Пример безопасной схемы:
To: admin@site.ru
From: Site Name <noreply@site.ru>
Additional Headers: Reply-To: [your-email]Здесь важно, чтобы From был адресом на том же домене, что и сайт. А поле Reply-To позволяет отвечать на письмо пользователя, не подменяя отправителя.
Когда проблема не в форме, а в сервере
Если форма отправляется, но письма не приходят даже на внутренний ящик домена, проверьте логи почты и настройки хостинга. На некоторых тарифах функция mail() ограничена или работает нестабильно. В таком случае SMTP — не опция, а необходимый слой доставки.
Если у вас есть доступ к логам, ищите ошибки вида:
- отказ в соединении с SMTP-сервером;
- ошибка авторизации;
- message rejected due to SPF/DKIM;
- relay denied;
- mailbox unavailable.
Пошаговое решение: переводим отправку на SMTP
Самый надежный путь — отправлять письма через SMTP-плагин. Это не лечит все проблемы автоматически, но резко снижает шанс, что письмо потеряется на уровне хостинга.
| Подход | Плюсы | Минусы |
|---|---|---|
Стандартный wp_mail() | Не требует дополнительной настройки | Часто хуже доставляемость, зависит от сервера |
| SMTP через плагин | Нормальная авторизация, лучше контроль доставки | Нужно настроить почтовый сервис и DNS |
| Собственный код через API почтового сервиса | Гибкость, можно логировать и контролировать отправку | Дороже по времени разработки и поддержке |
Если нужен быстрый и предсказуемый вариант, обычно достаточно SMTP. Дальше алгоритм такой:
- Создайте почтовый ящик на домене сайта.
- Подключите SMTP в WordPress через проверенный плагин.
- Укажите SMTP-сервер, порт, шифрование и логин.
- Проверьте, что
Fromв Contact Form 7 совпадает с доменом отправителя. - Настройте SPF и DKIM у домена.
Если используете внешний почтовый сервис, не забывайте, что у него могут быть отдельные требования к домену-отправителю. Без DNS-записей письмо может уходить, но попадать в спам или отклоняться.
Пример фильтра для подмены From на уровне кода
Иногда форму настраивают разные редакторы, и кто-то снова ставит неправильный адрес отправителя. В этом случае можно зафиксировать отправителя кодом. Это не заменяет SMTP, но помогает не сломать настройки руками.
add_filter( 'wpcf7_mail_components', function( $components, $contact_form, $mail_object ) {
if ( empty( $components['sender'] ) ) {
$components['sender'] = 'Site Name <noreply@site.ru>';
}
return $components;
}, 10, 3 );Этот пример не универсален для всех случаев, но идея простая: не давать форме отправлять письма с чужого домена. Если у вас несколько форм, лучше стандартизировать настройки в админке и не полагаться только на ручную дисциплину.
Проверка DNS: SPF, DKIM и DMARC
Если SMTP уже настроен, а письма все равно попадают в спам, смотрите на DNS-записи домена. Без них почтовые сервисы часто считают письмо подозрительным, даже если оно технически отправлено корректно.
- SPF показывает, какие серверы имеют право отправлять почту от имени домена.
- DKIM добавляет криптографическую подпись письма.
- DMARC задает политику обработки писем, которые не прошли проверку.
Проверять записи можно в панели домена или через внешние инструменты диагностики почты. Если SPF есть, но в нем не указан ваш SMTP-провайдер, это уже причина для проблем с доставкой.
Как проверить, что решение сработало
После настройки не ограничивайтесь тестовой отправкой с формы на один ящик. Проверьте цепочку целиком.
- Отправьте письмо на несколько адресов: корпоративный, Gmail, Яндекс Почту, если они у вас есть.
- Посмотрите заголовки письма: прошли ли SPF и DKIM.
- Проверьте, что в письме корректно отображается
Reply-To. - Убедитесь, что письмо не попадает в спам и не задерживается на несколько минут без причины.
- Проверьте форму в мобильном браузере, если на сайте есть кэш или оптимизация скриптов.
Если используете SMTP-плагин с логированием, откройте журнал отправки и убедитесь, что запрос к почтовому серверу завершился без ошибки авторизации и без отказа в доставке.
Частые ошибки и как их исправить
Адрес отправителя не совпадает с доменом сайта
Это самая частая причина спама и отказов. Исправление простое: в From ставьте адрес на своем домене, а не чужой ящик.
Нет SMTP, а хостинг режет PHP mail
Если хостинг ограничивает исходящую почту, стандартная отправка может работать нестабильно. Решение — SMTP или API почтового сервиса.
Неправильный Reply-To
Если в Reply-To подставлен не тег поля email, а статический адрес, отвечать на письмо будет неудобно. Обычно нужен именно адрес пользователя из формы.
Письмо уходит, но попадает в спам
Проверьте SPF, DKIM, DMARC и содержимое письма. Слишком много ссылок, подозрительные темы и подмена отправителя ухудшают доставляемость.
Кэш или оптимизация ломают форму
Иногда проблемы выглядят как почтовые, но на деле форма не отправляет AJAX-запрос из-за минификации скриптов или агрессивного кэша. В этом случае нужно исключить страницы с формой из оптимизации и проверить консоль браузера.
Безопасность и производительность
Если форма принимает данные от пользователей, не храните лишнее в письмах и не отправляйте персональные данные без необходимости. Чем меньше чувствительной информации уходит по почте, тем меньше риск утечки.
Для производительности полезно:
- не ставить тяжелые плагины логирования почты без необходимости;
- не дублировать SMTP-плагины одновременно;
- исключить страницу с формой из агрессивного JS-оптимизатора, если он ломает отправку;
- не использовать один и тот же ящик для всех форм сайта без фильтрации.
Если на сайте много форм и нужен контроль качества контента, иногда имеет смысл дополнительно использовать инструменты, которые помогают убрать дубли и лишние технические элементы на сайте. Для этого у WPShop есть Clearfy Pro, но подключать его стоит только если вы понимаете, какие именно задачи он закрывает на вашем проекте.
Главная проверка здесь простая: форма должна отправляться, письмо должно проходить SPF/DKIM, а получатель должен видеть корректный адрес ответа. Если хотя бы один из этих пунктов не выполняется, доставляемость будет нестабильной, даже если на первый взгляд все работает.