Contact Form 7 не отправляет письма

WordPress услуги
Нужна помощь с сайтом?
Исправим, настроим или улучшим сайт. Оставьте заявку — подскажем решение.
Оставить заявку
Автор:vkuzyomko

Contact Form 7 не отправляет письма

Краткий ответ: если Contact Form 7 не отправляет письма, сначала проверьте не саму форму, а всю цепочку: форма отправляется, Contact Form 7 принимает заявку, WordPress вызывает wp_mail(), SMTP отправляет письмо, домен проходит SPF/DKIM/DMARC, а почтовый ящик не режет письмо как спам. Чаще всего проблема в неправильных полях To, From, Reply-To, отсутствии SMTP, блокировке PHP mail на хостинге, reCAPTCHA, REST API, кешировании, спам-фильтрах или DNS-записях домена.

Визуально проблема может выглядеть по-разному: форма показывает “Сообщение отправлено”, но письмо не приходит; появляется красная рамка с ошибкой отправки; форма крутится бесконечно; заявка попадает в спам; письма приходят только на Gmail, но не приходят на корпоративную почту; администратор получает письмо, а клиент — нет.

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

Причина

Contact Form 7 сам по себе не является почтовым сервером. Он принимает данные формы и передаёт письмо в WordPress через функцию wp_mail(). Дальше письмо должен отправить сервер сайта или SMTP-плагин. Поэтому проблема может быть не в Contact Form 7, а в почтовой отправке WordPress, настройках домена, хостинге или почтовом сервисе получателя.

Самые частые причины:

  • неправильный получатель в поле To — письмо отправляется не туда или на несуществующий адрес;
  • неправильный From — форма пытается отправлять письмо “от имени” email посетителя, например Gmail или Yahoo;
  • нет SMTP — сайт использует ненадёжную отправку через PHP mail;
  • хостинг блокирует отправку писемmail() отключена или ограничена;
  • письмо попадает в спам — нет SPF, DKIM, DMARC или домен отправителя не совпадает с сайтом;
  • неправильный Reply-To — ответить клиенту невозможно или письмо выглядит подозрительно;
  • Contact Form 7 считает заявку спамом — reCAPTCHA, Akismet, honeypot или антиспам-блокировка;
  • форма не отправляется технически — ошибка JavaScript, REST API, кеш, security-плагин, WAF или Cloudflare;
  • ошибка в шаблоне Mail — используются несуществующие mail-tags, пустые поля или неправильные заголовки;
  • письмо слишком тяжёлое — большие вложения, несколько файлов, ограничения почтового сервера;
  • конфликт плагинов — SMTP, security, кеш, reCAPTCHA, multilingual, оптимизация JS или антиспам;
  • после обновления изменились настройки — плагин, тема, SMTP или серверная версия PHP начали работать иначе.

Главная ошибка — проверять только страницу формы. Нужно проверить весь путь заявки: браузер → Contact Form 7 → REST API → wp_mail() → SMTP → DNS домена → почтовый ящик получателя.

Диагностика

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

Симптом Вероятная причина Что проверить первым
Форма пишет “Сообщение отправлено”, но письма нет письмо ушло, но не доставлено или попало в спам SMTP-лог, спам, SPF/DKIM/DMARC, From
Красная рамка: “Не удалось отправить сообщение” ошибка отправки WordPress или сервера SMTP, wp_mail(), error_log, Contact Form 7 mail settings
Оранжевая рамка или сообщение о спаме заявка заблокирована антиспамом reCAPTCHA, Akismet, honeypot, IP, текст сообщения
Форма крутится и не отправляется JavaScript, REST API, кеш, WAF, security-плагин Console, Network, /wp-json/, Cloudflare
Письма приходят на один email, но не приходят на другой фильтр получателя, DNS, корпоративная почта, спам почтовые логи, SPF/DKIM/DMARC, другой получатель
Письма приходят без данных из формы неправильные mail-tags вкладка Mail, имена полей формы
Не приходят письма с вложениями размер файла, MIME, ограничения сервера лимит вложений, Mail → File attachments, SMTP-лог
Проблема появилась после обновления конфликт плагинов, SMTP, PHP, кеш, reCAPTCHA последние обновления, debug.log, отключение конфликтов на копии

Что проверить сразу

  • Появляется ли сообщение об успешной отправке?
  • Проверяли ли папку “Спам” и “Промоакции”?
  • Какой email указан в поле To?
  • Какой email указан в поле From?
  • Настроен ли SMTP-плагин?
  • Проходит ли тестовая отправка SMTP?
  • Есть ли SPF, DKIM и DMARC у домена?
  • Работает ли /wp-json/?
  • Есть ли ошибки в Console браузера?
  • Есть ли ошибки в wp-content/debug.log?
  • Не блокирует ли форму reCAPTCHA, Akismet, WAF или Cloudflare?

Нужно быстро решить проблему на сайте?

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

Оставить заявку

Решение

Исправляйте проблему по цепочке. Не нужно сразу удалять форму или менять плагин. В большинстве случаев Contact Form 7 работает, а ломается доставка письма или настройки отправителя.

1. Проверьте вкладку Mail в Contact Form 7

Откройте форму:

  • WordPress → Contact → Contact Forms;
  • выберите нужную форму;
  • откройте вкладку Mail.

Проверьте основные поля:

  • To — email, куда должна приходить заявка;
  • From — email отправителя;
  • Subject — тема письма;
  • Additional headers — обычно здесь нужен Reply-To;
  • Message body — тело письма с mail-tags;
  • File attachments — вложения, если форма принимает файлы.

2. Правильно настройте From

Частая ошибка — ставить в From email посетителя:

From: [your-email]

Так делать не стоит. Если посетитель ввёл Gmail, Outlook или чужой корпоративный email, ваш сайт пытается отправить письмо от имени чужого домена. Почтовые сервисы часто считают это подделкой отправителя.

Лучше использовать адрес на домене сайта:

From: Site Name <noreply@your-domain.com>

Email клиента лучше поставить в Reply-To:

Reply-To: [your-email]

Так письмо отправляется от вашего домена, но при ответе администратор отвечает клиенту.

3. Проверьте mail-tags

Имена полей в форме должны совпадать с тегами во вкладке Mail.

Если в форме поле называется:

[email* client-email]

то во вкладке Mail нужно использовать:

[client-email]

Если указать [your-email], а такого поля в форме нет, письмо может прийти без email клиента или Contact Form 7 покажет предупреждение в настройках.

4. Настройте SMTP

Для рабочих сайтов лучше не полагаться на стандартную отправку через PHP mail. Надёжнее отправлять письма через SMTP: доменную почту, Gmail/Google Workspace, Microsoft 365, SendGrid, Mailgun, Brevo или другой почтовый сервис.

Что проверить в SMTP:

  • SMTP host;
  • порт: 465, 587 или другой порт сервиса;
  • тип шифрования: SSL/TLS;
  • логин и пароль;
  • адрес отправителя From Email;
  • From Name;
  • принудительный From, если включён;
  • тестовая отправка;
  • лог ошибок SMTP.

Если тестовое письмо SMTP не отправляется, проблема не в Contact Form 7. Сначала нужно исправить SMTP-доступы, порт, пароль приложения, DNS или ограничения почтового сервиса.

5. Настройте SPF, DKIM и DMARC

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

  • SPF показывает, какие серверы могут отправлять письма от имени домена.
  • DKIM подписывает письмо цифровой подписью домена.
  • DMARC задаёт политику проверки и помогает почтовым сервисам понять, что делать с подозрительными письмами.

Проверьте, что домен сайта и домен отправителя совпадают или настроены корректно. Если сайт на example.com, а From стоит gmail.com, доставляемость будет хуже.

6. Проверьте REST API и JavaScript

Современный Contact Form 7 отправляет форму через JavaScript и REST API. Если на странице есть ошибка JS или заблокирован /wp-json/, форма может не отправляться или зависать.

Проверьте в браузере:

  • откройте страницу формы;
  • нажмите F12;
  • откройте вкладку Console;
  • проверьте JavaScript-ошибки;
  • откройте вкладку Network;
  • отправьте форму;
  • найдите запрос к /wp-json/contact-form-7/...;
  • посмотрите HTTP-статус и ответ сервера.

Если REST API возвращает 403, 404 или 500, нужно проверять security-плагин, WAF, Cloudflare, постоянные ссылки, кеш, PHP-ошибки и конфликт плагинов.

7. Проверьте reCAPTCHA и антиспам

Если Contact Form 7 считает заявку спамом, письмо не отправится. Это часто связано с reCAPTCHA v3, Akismet, honeypot-плагинами или слишком жёсткой защитой.

Проверьте:

  • правильные site key и secret key;
  • домен добавлен в настройки reCAPTCHA;
  • ключи соответствуют нужной версии reCAPTCHA;
  • не блокируются скрипты Google reCAPTCHA;
  • не конфликтует оптимизация JavaScript;
  • не слишком жёсткий spam score;
  • не режет ли заявки Cloudflare Turnstile или другой антиспам.

8. Исключите форму из агрессивной оптимизации

Плагины кеша и оптимизации могут ломать Contact Form 7, если откладывают, объединяют или минифицируют важные скрипты.

Проверьте:

  • defer/delay JavaScript;
  • минификацию JS;
  • объединение JS;
  • отложенную загрузку reCAPTCHA;
  • кеш страницы с формой;
  • Cloudflare Rocket Loader;
  • оптимизацию REST API;
  • блокировку wp-json.

Если после отключения оптимизации JS форма начала отправляться, нужно не оставлять всё отключенным, а добавить исключения для скриптов Contact Form 7 и reCAPTCHA.

9. Проверьте, не блокирует ли хостинг отправку

Некоторые хостинги ограничивают отправку писем через PHP mail или блокируют письма с подозрительным From.

Попросите хостинг проверить:

  • работает ли PHP mail();
  • есть ли ошибки в mail log;
  • не превышен ли лимит отправки;
  • не заблокирован ли аккаунт за подозрение на спам;
  • не запрещена ли отправка с чужого домена;
  • какой Return-Path используется;
  • попадает ли письмо в очередь сервера.

10. Проверьте второй шаблон Mail (2)

Contact Form 7 умеет отправлять второе письмо через Mail (2). Его часто используют для автоответа клиенту. Если Mail (2) настроен неправильно, клиент может не получать подтверждение, хотя администратор получает заявку.

Проверьте:

  • включён ли Mail (2);
  • правильный ли получатель;
  • не отправляется ли автоответ на пустой mail-tag;
  • правильный ли From;
  • не попадает ли автоответ в спам;
  • не блокирует ли SMTP массовую отправку похожих писем.

Код

Важно: код ниже нужен для диагностики. Он может писать технические данные в логи WordPress/WooCommerce и влиять на понимание ошибок отправки. Не логируйте персональные данные клиентов без необходимости. Перед изменениями сделайте резервную копию. Лучше вставлять код во временный мини-плагин, а не в активную тему.

Включить debug.log в wp-config.php

Куда вставлять: файл wp-config.php, перед строкой /* That's all, stop editing! */.

define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
@ini_set('display_errors', 0);

Проверить, работает ли wp_mail()

Куда вставлять: временно в отдельный мини-плагин или в functions.php дочерней темы. После проверки код нужно удалить.

add_action('init', function () {
    if (!current_user_can('manage_options')) {
        return;
    }

    if (!isset($_GET['test_wp_mail'])) {
        return;
    }

    $to = get_option('admin_email');
    $subject = 'Test wp_mail from WordPress';
    $message = 'This is a test email from wp_mail().';

    $sent = wp_mail($to, $subject, $message);

    wp_die($sent ? 'wp_mail sent' : 'wp_mail failed');
});

После вставки откройте:

https://your-domain.com/?test_wp_mail=1

Если тест не отправляется, проблема ниже Contact Form 7: WordPress mail, SMTP, хостинг или почтовая доставка.

Логировать успешную отправку Contact Form 7

Куда вставлять: отдельный мини-плагин или functions.php дочерней темы.

add_action('wpcf7_mail_sent', function ($contact_form) {
    error_log('CF7 mail sent. Form ID: ' . $contact_form->id() . ', title: ' . $contact_form->title());
});

Логировать ошибку отправки Contact Form 7

Этот код помогает понять, что Contact Form 7 дошёл до этапа отправки, но письмо не ушло.

add_action('wpcf7_mail_failed', function ($contact_form) {
    error_log('CF7 mail failed. Form ID: ' . $contact_form->id() . ', title: ' . $contact_form->title());
});

Логировать ошибку wp_mail

Куда смотреть результат: wp-content/debug.log.

add_action('wp_mail_failed', function ($wp_error) {
    error_log('wp_mail failed: ' . print_r($wp_error->get_error_messages(), true));
});

Пример корректных заголовков Contact Form 7

Пример для вкладки Mail:

To: admin@your-domain.com
From: Site Name <noreply@your-domain.com>
Subject: New request from site
Additional headers: Reply-To: [your-email]

Важная логика: письмо отправляется от домена сайта, а email клиента используется для ответа.

Результат

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

  • Contact Form 7 не проходит валидацию;
  • заявка помечается как спам;
  • форма не отправляется из-за JavaScript или REST API;
  • Contact Form 7 передаёт письмо, но wp_mail() не работает;
  • SMTP настроен неправильно;
  • письмо отправляется, но попадает в спам;
  • From настроен с чужим доменом;
  • Reply-To настроен неправильно;
  • DNS-записи SPF/DKIM/DMARC отсутствуют или ошибочные;
  • хостинг блокирует отправку;
  • письмо режет корпоративная почта получателя;
  • форма ломается из-за кеша, security-плагина, WAF или reCAPTCHA.

Правильный результат — форма показывает успешную отправку, письмо фиксируется в SMTP-логе, заявка приходит администратору, автоответ приходит клиенту, письмо не попадает в спам, а в логах нет ошибок wp_mail, REST API или Contact Form 7.

Дополнительные способы

Если форма показывает успех, но письма нет

Сначала проверьте SMTP-лог. Если письмо есть в логе SMTP, Contact Form 7 свою часть выполнил. Дальше проверяйте спам, DNS, SPF/DKIM/DMARC, фильтры получателя и почтовый сервер.

Если форма показывает красную ошибку

Красная ошибка обычно означает, что письмо не удалось отправить. Проверяйте SMTP, wp_mail(), настройки Mail, From, логи хостинга и wp_mail_failed.

Если форма показывает оранжевую ошибку

Оранжевое сообщение часто связано с антиспамом. Проверьте reCAPTCHA, Akismet, honeypot, blacklist, IP, текст сообщения и блокировки Cloudflare.

Если письма приходят на Gmail, но не приходят на корпоративную почту

Корпоративная почта может жёстче проверять SPF, DKIM, DMARC, Return-Path, From и репутацию отправителя. Проверьте DNS домена и заголовки письма.

Если письма приходят без данных клиента

Проверьте mail-tags. В форме и во вкладке Mail должны совпадать имена полей. Если поле называется [text* client-name], то в письме нужно использовать [client-name].

Если не работает только одна форма

Сравните её настройки с рабочей формой: поля, mail-tags, To, From, Reply-To, Mail (2), вложения, reCAPTCHA, условные поля и дополнительные плагины.

Если перестало работать после обновления

Проверьте последние обновления Contact Form 7, SMTP-плагина, security-плагина, кеша, reCAPTCHA, темы и PHP. После обновлений часто всплывают конфликты JavaScript, REST API и строгие проверки почты.

Частые ошибки

  • Ставить email клиента в From. Это ухудшает доставляемость и может выглядеть как подмена отправителя.
  • Не настраивать SMTP. PHP mail часто работает нестабильно или блокируется хостингом.
  • Игнорировать SPF, DKIM и DMARC. Без них письма чаще попадают в спам или отклоняются.
  • Проверять только папку “Входящие”. Заявки могут попадать в спам, промоакции, карантин или фильтры корпоративной почты.
  • Не смотреть логи SMTP. Без логов непонятно, письмо не отправилось или не доставилось.
  • Использовать несуществующие mail-tags. Письмо может приходить пустым или с пропущенными данными.
  • Ломать форму оптимизацией JavaScript. Defer, delay и минификация могут нарушить работу Contact Form 7.
  • Блокировать REST API. Если /wp-json/ закрыт, форма может не отправляться.
  • Не проверять Mail (2). Автоответ клиенту настраивается отдельно и может ломаться независимо от письма администратору.
  • Не тестировать после исправления. Нужно проверить заявку от имени обычного посетителя, а не только из админки.

Диагностика проблем

Чеклист: Contact Form 7 не отправляет письма

  1. Отправьте тестовую заявку как обычный посетитель.
  2. Зафиксируйте цвет и текст сообщения Contact Form 7.
  3. Проверьте папку “Спам” и фильтры почты.
  4. Проверьте вкладку Mail: To, From, Subject, Reply-To, Message body.
  5. Проверьте, совпадают ли mail-tags с полями формы.
  6. Проверьте Mail (2), если нужен автоответ клиенту.
  7. Настройте SMTP и отправьте тестовое письмо.
  8. Проверьте SMTP-лог.
  9. Проверьте SPF, DKIM и DMARC.
  10. Проверьте Console и Network на странице формы.
  11. Проверьте запрос к /wp-json/contact-form-7/....
  12. Проверьте reCAPTCHA, Akismet, honeypot и антиспам.
  13. Проверьте кеш, оптимизацию JS, Cloudflare и WAF.
  14. Включите debug.log и проверьте ошибки PHP.
  15. Проверьте wp_mail_failed.
  16. Сделайте финальный тест: заявка → письмо админу → автоответ клиенту → доставка не в спам.

Что смотреть в Network

  • запрос к /wp-json/contact-form-7/v1/contact-forms/...;
  • HTTP-статус: 200, 400, 403, 404, 500;
  • ответ JSON от Contact Form 7;
  • сообщение mail_sent, mail_failed, spam или validation_failed;
  • ошибки CORS;
  • блокировки WAF или Cloudflare;
  • ошибки reCAPTCHA;
  • редиректы с HTTP на HTTPS.

Что смотреть в заголовках письма

  • From — должен быть домен сайта или домен SMTP;
  • Reply-To — email клиента;
  • Return-Path — не должен конфликтовать с доменом отправителя;
  • SPF — pass, если сервер имеет право отправлять;
  • DKIM — pass, если подпись настроена;
  • DMARC — pass или хотя бы не fail;
  • Received — путь письма через серверы;
  • Message-ID — корректно сформирован почтовым сервером.

FAQ

Почему Contact Form 7 не отправляет письма?

Чаще всего из-за неправильных настроек Mail, отсутствия SMTP, блокировки PHP mail на хостинге, плохого From, отсутствия SPF/DKIM/DMARC, спам-фильтров, reCAPTCHA, REST API, кеша или конфликта плагинов.

Что делать первым?

Проверьте сообщение формы после отправки, папку “Спам”, настройки To/From/Reply-To, SMTP-лог и тестовую отправку SMTP. После этого проверяйте REST API, reCAPTCHA, кеш и логи WordPress.

Почему форма пишет “Сообщение отправлено”, но письмо не приходит?

Это значит, что Contact Form 7 считает отправку успешной, но письмо могло попасть в спам, быть отклонено почтовым сервером, заблокировано из-за DNS или отправлено на неправильный адрес.

Почему появляется ошибка “Не удалось отправить сообщение”?

Обычно WordPress не смог отправить письмо через wp_mail() или SMTP. Проверьте SMTP-настройки, From, хостинг, mail log, wp_mail_failed и debug.log.

Какой From указывать в Contact Form 7?

Лучше использовать email на домене сайта, например noreply@your-domain.com. Email клиента ставьте в Reply-To, а не в From.

Нужен ли SMTP для Contact Form 7?

Для рабочего сайта — да, лучше настроить SMTP. Отправка через PHP mail часто нестабильна, хуже проходит проверки и может блокироваться хостингом.

Почему письма Contact Form 7 попадают в спам?

Частые причины: нет SPF/DKIM/DMARC, неправильный From, плохой Return-Path, отправка с хостинга без репутации, спамный текст письма или корпоративные фильтры получателя.

Почему Contact Form 7 не отправляет письма после обновления?

Проверьте обновления Contact Form 7, SMTP-плагина, reCAPTCHA, кеша, security-плагина, темы и PHP. Часто после обновлений ломается REST API, JavaScript или строгая проверка email.

Почему не работает автоответ клиенту?

Автоответ настраивается в Mail (2). Проверьте, включён ли Mail (2), правильный ли получатель, существует ли mail-tag email клиента и не попадает ли письмо в спам.

Может ли reCAPTCHA блокировать отправку?

Да. Если reCAPTCHA настроена неправильно, скрипты блокируются или score слишком низкий, Contact Form 7 может пометить заявку как спам и не отправить письмо.

Может ли кеш ломать Contact Form 7?

Да. Агрессивная оптимизация JavaScript, delay/defer, Cloudflare Rocket Loader, минификация и блокировка REST API могут мешать отправке формы.

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

Проверьте SMTP-лог. Если письма нет в SMTP-логе, проблема до отправки. Если письмо есть в логе, но его нет во входящих, проблема в доставке, спаме, DNS или почтовом сервере получателя.

Вывод

Если Contact Form 7 не отправляет письма, не стоит сразу менять плагин формы. Чаще всего проблема находится в настройках Mail, SMTP, From, Reply-To, DNS-записях SPF/DKIM/DMARC, REST API, reCAPTCHA, кеше, security-плагине или почтовой доставке.

Самый безопасный порядок: проверить сообщение формы, вкладку Mail, mail-tags, SMTP, логи отправки, спам, DNS домена, Console/Network, REST API и debug.log. Так можно понять, где именно теряется заявка, и восстановить стабильную отправку писем без случайных правок.

Об авторе

vkuzyomko administrator