Краткий ответ: если Contact Form 7 не отправляет письма, чаще всего проблема не в самой форме, а в настройках вкладки Mail, неправильном поле From, отсутствии SMTP, ошибках SPF/DKIM/DMARC, блокировке PHP mail на хостинге, конфликте кеша, AJAX-отправке или попадании писем в спам. Сначала проверьте настройки формы, затем wp_mail(), SMTP-лог, DNS домена и доставку на разные email-адреса.
Contact Form 7 не отправляет письма напрямую как почтовый сервис. Плагин собирает данные формы и передаёт письмо в стандартный механизм WordPress — wp_mail(). Дальше письмо должно уйти через PHP mail, SMTP-плагин или внешний почтовый сервис.
Из-за этого проблема может быть на разных уровнях:
Если проблема не только в Contact Form 7, а письма не отправляются и из других частей сайта, сначала проверьте общую инструкцию Не отправляются письма WordPress: причины и как исправить. Там описана вся цепочка отправки: wp_mail(), SMTP, From Email, DNS и хостинг.
Нужно понять, форма не отправляет письмо вообще или письмо отправляется, но не доходит. Это разные проблемы.
| Симптом | Вероятная причина | Что проверить |
|---|---|---|
| Форма пишет “Сообщение отправлено”, но письма нет | Письмо ушло, но не доставлено или попало в спам | спам, SMTP-лог, SPF/DKIM/DMARC, From Email |
| Появляется ошибка “Failed to send your message” | wp_mail() или SMTP не смог отправить письмо | SMTP, PHP mail, wp_mail_failed, логи хостинга |
| Кнопка крутится бесконечно | AJAX, REST API, кеш, JS-ошибка, security-плагин | Console, Network, /wp-json/, кеш, WAF |
| Тест SMTP работает, а Contact Form 7 нет | Ошибка в настройках конкретной формы | Mail tab, To, From, Reply-To, Message body |
| Письмо приходит без email клиента | Не добавлен Reply-To или тег поля не вставлен в тело письма | Additional headers, Message body |
| Письмо приходит только на один адрес | Неверный синтаксис нескольких получателей или фильтр почты | To, Cc, Bcc, SMTP-лог, заголовки письма |
| После обновления форма перестала работать | Новая проверка конфигурации, конфликт плагина или темы | ошибки Contact Form 7, Mail tab, Additional headers |
Лучше исправлять Contact Form 7 по цепочке: настройки формы → тест wp_mail() → SMTP → DNS → кеш и AJAX → логи.
Поле To — это адрес, куда должна приходить заявка.
Правильно:
info@example.com
Для нескольких получателей используйте корректный формат через запятую:
info@example.com, manager@example.com
Если письма не доходят на корпоративную почту, временно поставьте Gmail или другой внешний ящик. Это поможет понять, проблема в Contact Form 7 или в принимающей почте.
Одна из самых частых ошибок — ставить email посетителя в поле From.
Плохо:
[your-email]
Такое письмо выглядит для почтовых сервисов подозрительно: сайт example.com пытается отправить письмо от имени Gmail, Yahoo или другого домена посетителя.
Правильно использовать адрес на домене сайта:
Site Name <noreply@example.com>
или:
Site Name <info@example.com>
Если доменного ящика ещё нет, создайте его на хостинге или в почтовом сервисе. Не используйте чужой домен в From.
Email посетителя нужно указывать не в From, а в Reply-To. Тогда письмо отправляется от домена сайта, но при ответе менеджер отвечает клиенту.
Во вкладке Mail в поле Additional headers добавьте:
Reply-To: [your-email]
Важно: тег [your-email] должен реально существовать в форме. Если поле email называется иначе, например [email-client], то Reply-To нужно писать так:
Reply-To: [email-client]
Если тело письма пустое или в нём используются несуществующие теги, Contact Form 7 может работать некорректно или отправлять бесполезные письма.
Пример нормального тела письма:
Имя: [your-name]
Email: [your-email]
Телефон: [your-phone]
Сообщение:
[your-message]
Contact Form 7 подсвечивает ошибки в настройках формы. Не игнорируйте предупреждения во вкладке Mail.
Частые ошибки:
Если настройки формы правильные, но письма всё равно не приходят, настройте SMTP. Это более надёжный способ отправки, чем стандартный PHP mail на хостинге.
В SMTP-плагине обычно нужно указать:
SMTP сам по себе не всегда решает доставку. Если DNS домена настроен неправильно, письма могут уходить, но попадать в спам или отклоняться.
Если подключили новый SMTP-сервис, обязательно добавьте его в SPF и включите DKIM по инструкции почтового сервиса.
Если форма зависает, крутится спиннер или не показывает сообщение об успешной отправке, проблема может быть не в почте, а в JavaScript или REST API.
Откройте DevTools в браузере:
Важно: код ниже влияет на диагностику отправки писем. Перед добавлением сделайте backup. Лучше вставлять код в отдельный мини-плагин или в functions.php дочерней темы. После теста временный код нужно удалить.
Куда вставлять: functions.php дочерней темы или отдельный мини-плагин.
add_action('init', function () {
if (!isset($_GET['test_cf7_mail'])) {
return;
}
if (!current_user_can('manage_options')) {
wp_die('Access denied');
}
$to = get_option('admin_email');
$subject = 'Contact Form 7 mail test';
$message = 'Test email from WordPress wp_mail().';
$result = wp_mail($to, $subject, $message);
if ($result) {
wp_die('wp_mail() returned true. Check inbox and spam folder.');
}
wp_die('wp_mail() returned false. Check SMTP settings, hosting mail logs and wp_mail_failed errors.');
});
После добавления откройте:
https://example.com/?test_cf7_mail=1
Куда вставлять: functions.php дочерней темы или отдельный мини-плагин.
add_action('wp_mail_failed', function ($wp_error) {
if (!is_wp_error($wp_error)) {
return;
}
error_log('WP Mail Failed: ' . $wp_error->get_error_message());
$error_data = $wp_error->get_error_data();
if (!empty($error_data)) {
error_log('WP Mail Failed Data: ' . print_r($error_data, true));
}
});
Куда вставлять: настройки формы Contact Form 7 → вкладка Mail.
To:
info@example.com
From:
Site Name <noreply@example.com>
Subject:
Заявка с сайта: [your-subject]
Additional headers:
Reply-To: [your-email]
Message body:
Имя: [your-name]
Email: [your-email]
Телефон: [your-phone]
Сообщение:
[your-message]
Куда вставлять: отдельный мини-плагин. Не храните пароль в публичном репозитории. Для обычного сайта чаще безопаснее использовать SMTP-плагин с интерфейсом и логами.
add_action('phpmailer_init', function ($phpmailer) {
$phpmailer->isSMTP();
$phpmailer->Host = 'smtp.example.com';
$phpmailer->SMTPAuth = true;
$phpmailer->Port = 587;
$phpmailer->Username = 'noreply@example.com';
$phpmailer->Password = 'your-smtp-password';
$phpmailer->SMTPSecure = 'tls';
$phpmailer->From = 'noreply@example.com';
$phpmailer->FromName = get_bloginfo('name');
});
Куда запускать: SSH в корневой папке сайта.
wp option get siteurl
wp option get home
wp plugin list --status=active
Если форма зависает после отправки, дополнительно проверьте Console и Network в браузере. WP-CLI не покажет JS-ошибки страницы.
После исправления Contact Form 7 должен отправлять заявки стабильно, а письма должны приходить во входящие или хотя бы фиксироваться в логе отправки.
Хороший результат выглядит так:
Contact Form 7 сам по себе не хранит отправленные сообщения. Если почта сломалась, заявка может быть потеряна. Для страховки можно использовать Flamingo или другой плагин сохранения заявок.
Это особенно важно для бизнес-сайтов, лендингов, сервисных компаний и сайтов, где каждая заявка имеет ценность.
В Contact Form 7 есть дополнительный шаблон письма Mail (2). Его часто используют как автоответ клиенту.
Если основное письмо приходит администратору, но автоответ клиенту нет, проверьте:
Если форма отправляет файлы, проблема может быть в размерах вложений, типах файлов или ошибке пути.
Проверьте:
Если форма не отправляется или отправляется не всегда, проверьте reCAPTCHA, Akismet, Cloudflare Turnstile, security-плагины и WAF. Иногда они блокируют нормальные заявки.
Страница с формой может ломаться из-за отложенной загрузки JavaScript, минификации, объединения файлов или агрессивного кеша.
Попробуйте исключить из оптимизации:
Если форма перестала отправлять письма после обновления плагинов или темы, проверьте изменения по шагам. Полезно использовать общий порядок из статьи Сайт WordPress сломался после обновления: что делать.
Это главная ошибка. Email клиента должен быть в Reply-To, а From должен быть адресом на домене сайта.
Если плагин показывает ошибку конфигурации, её нужно исправить. Не стоит просто закрывать предупреждение и ждать, что письма будут доходить.
Сообщение “отправлено” не гарантирует, что письмо дошло. Оно может быть принято WordPress, но отклонено почтовым сервисом.
Письма с сайта часто попадают в “Спам”, “Промоакции”, “Уведомления” или блокируются корпоративной почтой.
Оставьте один SMTP-плагин. Несколько плагинов могут конфликтовать и перезаписывать настройки PHPMailer.
Если сайт приносит клиентов, заявки должны сохраняться в базе, CRM или хотя бы в логах. Иначе при сбое почты вы не узнаете, сколько обращений потеряно.
SMTP может быть настроен правильно, но без SPF, DKIM и DMARC письма будут хуже проходить фильтры почтовых сервисов.
Чаще всего из-за неправильного From, отсутствия SMTP, ошибок во вкладке Mail, блокировки PHP mail на хостинге, проблем SPF/DKIM/DMARC, кеша, REST API или попадания писем в спам.
В поле From нужно указать email на домене сайта, например Site Name <noreply@example.com>. Email посетителя нужно ставить в Reply-To: [your-email].
Проверьте спам, SMTP-лог, From Email, SPF/DKIM/DMARC, доставку на другой ящик и сохранение заявок через Flamingo или аналогичный плагин.
Для рабочего сайта — да. SMTP с авторизацией обычно надёжнее, чем PHP mail на хостинге, особенно для заявок, интернет-магазинов и корпоративной почты.
Потому что форма могла успешно передать письмо в WordPress, но дальше оно не дошло до ящика: попало в спам, отклонено почтовым сервером, заблокировано из-за SPF/DKIM/DMARC или не записано в лог доставки.
В поле To нужно указать email, на который должны приходить заявки. Например info@example.com. Для нескольких получателей используйте корректное разделение через запятую.
В поле From лучше указать доменный адрес сайта: Site Name <noreply@example.com> или Site Name <info@example.com>. Не ставьте туда email посетителя.
Потому что сайт будет пытаться отправить письмо от имени чужого домена. Почтовые сервисы считают это подозрительным и могут отклонить письмо или отправить его в спам.
Добавьте в Additional headers строку Reply-To: [your-email]. Тогда письмо будет отправляться от домена сайта, но при ответе менеджер будет отвечать на email клиента.
После обновления могли измениться проверки конфигурации, сломаться Additional headers, появиться конфликт с темой, кешем, SMTP-плагином или security-плагином. Проверьте предупреждения во вкладке Mail и логи отправки.
Настройте сохранение заявок в базе через Flamingo или другой плагин. Тогда даже при проблемах с почтой вы сможете увидеть отправленные формы в админке WordPress.
Проверьте Console и Network в браузере, REST API, кеш, оптимизацию JavaScript, reCAPTCHA, security-плагины и WAF. Такая проблема часто связана не с почтой, а с фронтендом или блокировкой запроса.
Если Contact Form 7 не отправляет письма, заявки теряются или форма показывает успешную отправку без доставки, лучше сначала проверить настройки формы, SMTP, DNS и логи, а не менять плагины наугад.
Если Contact Form 7 не отправляет письма, не нужно сразу менять плагин формы. Сначала проверьте вкладку Mail, поля To, From, Reply-To, Message body, SMTP, SPF/DKIM/DMARC, спам, AJAX-запросы и кеш. Надёжная схема для бизнес-сайта — доменный From Email, Reply-To с email клиента, SMTP с авторизацией, корректные DNS-записи и сохранение заявок в базе.
Об авторе