Краткий ответ: если 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, настройках домена, хостинге или почтовом сервисе получателя.
Самые частые причины:
mail() отключена или ограничена;Главная ошибка — проверять только страницу формы. Нужно проверить весь путь заявки: браузер → 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, отключение конфликтов на копии |
To?From?/wp-json/?wp-content/debug.log?Если не хотите рисковать сайтом и тратить время на эксперименты, можно оставить заявку. Я посмотрю задачу и предложу аккуратное решение.
Исправляйте проблему по цепочке. Не нужно сразу удалять форму или менять плагин. В большинстве случаев Contact Form 7 работает, а ломается доставка письма или настройки отправителя.
Откройте форму:
Проверьте основные поля:
Reply-To;Частая ошибка — ставить в From email посетителя:
From: [your-email]
Так делать не стоит. Если посетитель ввёл Gmail, Outlook или чужой корпоративный email, ваш сайт пытается отправить письмо от имени чужого домена. Почтовые сервисы часто считают это подделкой отправителя.
Лучше использовать адрес на домене сайта:
From: Site Name <noreply@your-domain.com>
Email клиента лучше поставить в Reply-To:
Reply-To: [your-email]
Так письмо отправляется от вашего домена, но при ответе администратор отвечает клиенту.
Имена полей в форме должны совпадать с тегами во вкладке Mail.
Если в форме поле называется:
[email* client-email]
то во вкладке Mail нужно использовать:
[client-email]
Если указать [your-email], а такого поля в форме нет, письмо может прийти без email клиента или Contact Form 7 покажет предупреждение в настройках.
Для рабочих сайтов лучше не полагаться на стандартную отправку через PHP mail. Надёжнее отправлять письма через SMTP: доменную почту, Gmail/Google Workspace, Microsoft 365, SendGrid, Mailgun, Brevo или другой почтовый сервис.
Что проверить в SMTP:
Если тестовое письмо SMTP не отправляется, проблема не в Contact Form 7. Сначала нужно исправить SMTP-доступы, порт, пароль приложения, DNS или ограничения почтового сервиса.
Даже если SMTP отправляет письма, без правильных DNS-записей они могут попадать в спам или отклоняться корпоративной почтой.
Проверьте, что домен сайта и домен отправителя совпадают или настроены корректно. Если сайт на example.com, а From стоит gmail.com, доставляемость будет хуже.
Современный Contact Form 7 отправляет форму через JavaScript и REST API. Если на странице есть ошибка JS или заблокирован /wp-json/, форма может не отправляться или зависать.
Проверьте в браузере:
/wp-json/contact-form-7/...;Если REST API возвращает 403, 404 или 500, нужно проверять security-плагин, WAF, Cloudflare, постоянные ссылки, кеш, PHP-ошибки и конфликт плагинов.
Если Contact Form 7 считает заявку спамом, письмо не отправится. Это часто связано с reCAPTCHA v3, Akismet, honeypot-плагинами или слишком жёсткой защитой.
Проверьте:
Плагины кеша и оптимизации могут ломать Contact Form 7, если откладывают, объединяют или минифицируют важные скрипты.
Проверьте:
wp-json.Если после отключения оптимизации JS форма начала отправляться, нужно не оставлять всё отключенным, а добавить исключения для скриптов Contact Form 7 и reCAPTCHA.
Некоторые хостинги ограничивают отправку писем через PHP mail или блокируют письма с подозрительным From.
Попросите хостинг проверить:
mail();Contact Form 7 умеет отправлять второе письмо через Mail (2). Его часто используют для автоответа клиенту. Если Mail (2) настроен неправильно, клиент может не получать подтверждение, хотя администратор получает заявку.
Проверьте:
Важно: код ниже нужен для диагностики. Он может писать технические данные в логи WordPress/WooCommerce и влиять на понимание ошибок отправки. Не логируйте персональные данные клиентов без необходимости. Перед изменениями сделайте резервную копию. Лучше вставлять код во временный мини-плагин, а не в активную тему.
Куда вставлять: файл 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);
Куда вставлять: временно в отдельный мини-плагин или в 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, хостинг или почтовая доставка.
Куда вставлять: отдельный мини-плагин или 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 дошёл до этапа отправки, но письмо не ушло.
add_action('wpcf7_mail_failed', function ($contact_form) {
error_log('CF7 mail failed. Form ID: ' . $contact_form->id() . ', title: ' . $contact_form->title());
});
Куда смотреть результат: 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));
});
Пример для вкладки 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 клиента используется для ответа.
После диагностики должно стать понятно, где именно ломается отправка:
wp_mail() не работает;Правильный результат — форма показывает успешную отправку, письмо фиксируется в 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.
Корпоративная почта может жёстче проверять 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 и строгие проверки почты.
/wp-json/ закрыт, форма может не отправляться./wp-json/contact-form-7/....debug.log и проверьте ошибки PHP.wp_mail_failed./wp-json/contact-form-7/v1/contact-forms/...;mail_sent, mail_failed, spam или validation_failed;Чаще всего из-за неправильных настроек 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.
Лучше использовать email на домене сайта, например noreply@your-domain.com. Email клиента ставьте в Reply-To, а не в From.
Для рабочего сайта — да, лучше настроить SMTP. Отправка через PHP mail часто нестабильна, хуже проходит проверки и может блокироваться хостингом.
Частые причины: нет SPF/DKIM/DMARC, неправильный From, плохой Return-Path, отправка с хостинга без репутации, спамный текст письма или корпоративные фильтры получателя.
Проверьте обновления Contact Form 7, SMTP-плагина, reCAPTCHA, кеша, security-плагина, темы и PHP. Часто после обновлений ломается REST API, JavaScript или строгая проверка email.
Автоответ настраивается в Mail (2). Проверьте, включён ли Mail (2), правильный ли получатель, существует ли mail-tag email клиента и не попадает ли письмо в спам.
Да. Если reCAPTCHA настроена неправильно, скрипты блокируются или score слишком низкий, 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. Так можно понять, где именно теряется заявка, и восстановить стабильную отправку писем без случайных правок.
Об авторе