Contact Form 7 не отправляет письма через SMTP: как найти причину и исправить

Если форма Contact Form 7 отправляется без ошибок, а письма не приходят в почту, проблема обычно не в самой форме. Чаще всего ломается связка между WordPress, SMTP-плагином, заголовками письма и серверной доставкой. Ниже — рабочий порядок диагностики, который помогает не гадать, а быстро сузить причину.

Как понять, где именно ломается отправка

Сначала нужно разделить проблему на три уровня: форма не отправляется вообще, WordPress не может сформировать письмо, либо письмо уходит, но теряется по пути. Это разные сценарии, и лечатся они по-разному.

Что проверить в первую очередь

  • В Contact Form 7 нет ли ошибки в поле Mail и Mail (2).
  • Совпадает ли домен в адресе отправителя с доменом сайта или SMTP-сервера.
  • Не подменяет ли хостинг функцию mail() или не блокирует ли исходящую почту.
  • Есть ли в SMTP-плагине лог отправки и статус успешной передачи.
  • Не попадает ли письмо в спам из-за SPF, DKIM или DMARC.

Если в админке Contact Form 7 после отправки показывается зеленое сообщение, это еще не означает, что письмо доставлено. Это только значит, что форма прошла обработку на стороне WordPress.

Диагностика: где смотреть ошибки

Самый практичный путь — включить логирование там, где оно реально помогает. Если у вас уже стоит SMTP-плагин, проверьте его журнал. Если нет, сначала поставьте нормальную отправку через SMTP, а потом уже ищите причину в логах.

Проверка через WP Mail SMTP или аналогичный SMTP-плагин

В большинстве случаев достаточно одного SMTP-плагина с журналом отправки. Важно не просто включить его, а проверить, что письмо уходит через нужный сервер, а не через mail().

Типичная ошибка — SMTP настроен, но Contact Form 7 продолжает отправлять письмо с адреса wordpress@domain.tld или с чужого домена. Такой адрес часто режется на стороне получателя.

Что смотреть в логах

  • код ответа SMTP-сервера;
  • адрес отправителя и получателя;
  • тему письма;
  • ошибку авторизации, если сервер не принимает логин и пароль;
  • ошибку TLS/SSL, если шифрование не совпадает с настройками порта.

Если логов нет, временно включите отладку WordPress и проверьте, не пишет ли плагин отправки в debug.log. Но не держите отладку включенной постоянно на боевом сайте.

define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);

Пошаговое решение для Contact Form 7

Ниже порядок, который обычно дает результат без лишних экспериментов.

1. Исправьте адрес отправителя в форме

В настройках письма Contact Form 7 поле From должно быть привязано к домену сайта или к адресу, который разрешен вашим SMTP-сервером. Не используйте случайные внешние адреса вроде Gmail в качестве отправителя, если сервер не настроен на их отправку.

Практически безопасный вариант:

From: WordPress <no-reply@site.ru>
Reply-To: [your-email]

Здесь Reply-To позволяет отвечать на письмо пользователя, а From остается техническим адресом сайта.

2. Настройте SMTP, а не отправку через PHP mail

Если хостинг поддерживает SMTP, используйте его. Это не гарантирует доставку, но резко снижает количество проблем с авторизацией и фильтрацией.

Для проверки отправьте тестовое письмо из SMTP-плагина. Если тест не проходит, не тратьте время на Contact Form 7 — сначала чините сам канал отправки.

3. Проверьте заголовки и вложения

Иногда письмо не уходит из-за некорректного вложения или слишком тяжелого файла. Contact Form 7 не должен принимать все подряд. Ограничьте типы и размер файлов в форме, если используете загрузку.

[file your-file limit:5mb filetypes:pdf|jpg|png]

Если вложение не нужно, уберите поле загрузки совсем. Чем меньше сложных частей в письме, тем проще диагностика.

4. Сверьте доменную аутентификацию

Даже при рабочем SMTP письмо может не доходить, если домен не подтвержден SPF/DKIM/DMARC. Это особенно заметно, когда письма уходят в спам или отклоняются без явной ошибки в WordPress.

Проверка простая: откройте заголовки письма у получателя и найдите строки про spf=pass, dkim=pass, dmarc=pass. Если там провал, проблема уже не в Contact Form 7.

Сравнение подходов: плагин, код, настройки хостинга

ПодходКогда подходитПлюсыМинусы
SMTP-плагинПочта не уходит или попадает в спамБыстро внедряется, есть логиЗависимость от стороннего плагина
Код через wp_mailНужна точечная доработка темы или плагинаГибкость, контроль заголовковНужны навыки разработки и тестирование
Настройка хостингаПроблема в серверной почтеРешает корень проблемыНе всегда доступно на shared-хостинге

Если нужен контроль через код

Иногда полезно принудительно задать отправителя для всех писем WordPress, чтобы Contact Form 7 не использовал случайные значения из формы. Это особенно актуально, если на сайте несколько форм и часть писем формируется сторонними плагинами.

add_filter('wp_mail_from', function ($from_email) {
    return 'no-reply@site.ru';
});

add_filter('wp_mail_from_name', function ($from_name) {
    return 'Site Name';
});

Этот код лучше добавлять в дочернюю тему или в небольшой mu-plugin, а не в основной файл темы, который может перезаписаться при обновлении.

Если вы используете SMTP-плагин, не дублируйте его настройки этим кодом без необходимости. Иначе можно получить конфликт: плагин отправляет одно, фильтр подменяет другое.

Проверка результата после внедрения

После изменений не ограничивайтесь одной тестовой отправкой. Проверьте цепочку целиком.

  • Отправьте форму с реальным адресом получателя.
  • Проверьте папку входящих и спам.
  • Посмотрите логи SMTP-плагина.
  • Откройте заголовки письма и убедитесь, что доменная аутентификация проходит.
  • Если есть вложение, проверьте, что оно дошло и открывается.

Хороший признак — письмо приходит стабильно с одного и того же адреса, а в логах нет повторных попыток отправки и ошибок авторизации.

Частые ошибки и как их исправить

Используют адрес Gmail в поле From

Это частая причина отказа или спама. Для отправителя лучше использовать адрес на своем домене, а Gmail оставить только как получателя или как адрес для ответа.

Оставляют пустой Reply-To

Тогда отвечать на письмо неудобно, а иногда теряется контекст обращения. В Contact Form 7 лучше явно подставлять email пользователя в Reply-To.

Смешивают несколько способов отправки

Если одновременно настроены SMTP-плагин, кастомный фильтр wp_mail_from и еще серверная переадресация, отладка превращается в хаос. Оставьте один основной канал и проверьте его отдельно.

Не проверяют лимиты хостинга

Некоторые хостинги ограничивают число исходящих писем в час. В таком случае форма может работать, но часть сообщений не будет уходить при всплеске обращений.

Что делать, если письма все равно не приходят

Если SMTP настроен, заголовки корректны, а письма не доходят, проверьте уже внешние факторы: фильтры почтового сервиса, черные списки IP, ограничения хостинга и правила антиспама у получателя. На этом этапе Contact Form 7 обычно уже ни при чем.

Для сайтов с высокой ценой потери заявки полезно хранить копию обращения в админке или отправлять уведомление в дополнительный канал, например на отдельный рабочий ящик. Это не заменяет почту, но снижает риск пропустить заявку из-за сбоя доставки.

Если вам нужно уменьшить количество технического мусора в WordPress, можно дополнительно убрать лишние дубли и служебные хвосты через Clearfy Pro: https://wpshop.ru/plugins/clearfy. Но это уже вспомогательная мера, а не замена нормальной настройке почты.

Главная идея простая: сначала убедитесь, что письмо формируется корректно, потом — что оно уходит через рабочий SMTP, и только после этого ищите проблемы на стороне получателя. Такой порядок экономит время и не заставляет менять настройки вслепую.

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Contact Form 7 не отправляет письма через SMTP: как найти причину и исправить
24.09.2026
Как добавить отдельное сообщение об успешной отправке для каждой формы Contact Form 7
27.09.2026
Как отключить скрипты Contact Form 7 на страницах без формы
24.09.2026
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше