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

Автор:vkuzyomko

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

Краткий ответ: если 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-плагин или внешний почтовый сервис.

Из-за этого проблема может быть на разных уровнях:

  • форма неправильно настроена;
  • поле To содержит ошибочный email;
  • поле From использует email посетителя вместо доменного адреса сайта;
  • Reply-To указан неверно;
  • в Additional headers есть ошибка синтаксиса;
  • письмо отправляется, но попадает в спам;
  • хостинг блокирует PHP mail;
  • SMTP настроен неправильно;
  • DNS-записи SPF, DKIM или DMARC не соответствуют отправителю;
  • AJAX-запрос формы блокируется кешем, WAF или security-плагином;
  • письмо не сохраняется нигде, поэтому кажется, что заявка просто исчезла.

Если проблема не только в 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

Быстрая проверка

  • Откройте нужную форму в админке WordPress.
  • Перейдите во вкладку Mail.
  • Проверьте поле To.
  • Проверьте поле From.
  • Проверьте Additional headers.
  • Проверьте, есть ли в Message body теги полей формы.
  • Отправьте тест на Gmail и на доменную почту.
  • Проверьте папку “Спам”.
  • Проверьте SMTP-лог, если SMTP уже настроен.
  • Откройте Console и Network в браузере, если форма зависает.

Решение

Лучше исправлять Contact Form 7 по цепочке: настройки формы → тест wp_mail() → SMTP → DNS → кеш и AJAX → логи.

1. Проверьте поле To

Поле To — это адрес, куда должна приходить заявка.

Правильно:

info@example.com

Для нескольких получателей используйте корректный формат через запятую:

info@example.com, manager@example.com

Если письма не доходят на корпоративную почту, временно поставьте Gmail или другой внешний ящик. Это поможет понять, проблема в Contact Form 7 или в принимающей почте.

2. Исправьте поле From

Одна из самых частых ошибок — ставить email посетителя в поле From.

Плохо:

[your-email]

Такое письмо выглядит для почтовых сервисов подозрительно: сайт example.com пытается отправить письмо от имени Gmail, Yahoo или другого домена посетителя.

Правильно использовать адрес на домене сайта:

Site Name <noreply@example.com>

или:

Site Name <info@example.com>

Если доменного ящика ещё нет, создайте его на хостинге или в почтовом сервисе. Не используйте чужой домен в From.

3. Добавьте Reply-To

Email посетителя нужно указывать не в From, а в Reply-To. Тогда письмо отправляется от домена сайта, но при ответе менеджер отвечает клиенту.

Во вкладке Mail в поле Additional headers добавьте:

Reply-To: [your-email]

Важно: тег [your-email] должен реально существовать в форме. Если поле email называется иначе, например [email-client], то Reply-To нужно писать так:

Reply-To: [email-client]

4. Проверьте Message body

Если тело письма пустое или в нём используются несуществующие теги, Contact Form 7 может работать некорректно или отправлять бесполезные письма.

Пример нормального тела письма:

Имя: [your-name]
Email: [your-email]
Телефон: [your-phone]

Сообщение:
[your-message]

5. Проверьте ошибки конфигурации Contact Form 7

Contact Form 7 подсвечивает ошибки в настройках формы. Не игнорируйте предупреждения во вкладке Mail.

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

  • invalid mailbox syntax;
  • sender email address does not belong to the site domain;
  • invalid mail header fields;
  • attachment file does not exist;
  • unsafe email config;
  • empty message body;
  • несуществующий mail-tag.

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

Если настройки формы правильные, но письма всё равно не приходят, настройте SMTP. Это более надёжный способ отправки, чем стандартный PHP mail на хостинге.

В SMTP-плагине обычно нужно указать:

  • SMTP Host;
  • SMTP Port;
  • Encryption: SSL или TLS;
  • SMTP Username;
  • SMTP Password или app password;
  • From Email на домене сайта;
  • From Name;
  • Return Path, если есть такая настройка.

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

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

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

Если подключили новый SMTP-сервис, обязательно добавьте его в SPF и включите DKIM по инструкции почтового сервиса.

8. Проверьте AJAX, REST API и кеш

Если форма зависает, крутится спиннер или не показывает сообщение об успешной отправке, проблема может быть не в почте, а в JavaScript или REST API.

Откройте DevTools в браузере:

  • Console — смотрите JS-ошибки;
  • Network — смотрите запросы к REST API;
  • проверьте ответ на отправку формы;
  • проверьте, нет ли 403, 404, 500;
  • временно отключите кеш и оптимизацию JS для страницы с формой.

Код

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

Проверить wp_mail() через временный URL

Куда вставлять: 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

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

Куда вставлять: 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));
    }
});

Пример правильной вкладки Mail для Contact Form 7

Куда вставлять: настройки формы 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 через phpmailer_init без плагина

Куда вставлять: отдельный мини-плагин. Не храните пароль в публичном репозитории. Для обычного сайта чаще безопаснее использовать 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');
});

Проверить REST API через WP-CLI

Куда запускать: SSH в корневой папке сайта.

wp option get siteurl
wp option get home
wp plugin list --status=active

Если форма зависает после отправки, дополнительно проверьте Console и Network в браузере. WP-CLI не покажет JS-ошибки страницы.

Результат

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

Хороший результат выглядит так:

  • форма показывает сообщение об успешной отправке;
  • письмо приходит на указанный email;
  • Reply-To ведёт на email клиента;
  • From использует адрес домена сайта;
  • SMTP-тест проходит успешно;
  • SPF, DKIM и DMARC проходят проверку;
  • в Console нет JS-ошибок;
  • AJAX-запрос формы не получает 403/500;
  • заявки не теряются при сбое почты, потому что сохраняются в базе или CRM.

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

Сохраняйте заявки в базе

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

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

Проверьте Mail (2)

В Contact Form 7 есть дополнительный шаблон письма Mail (2). Его часто используют как автоответ клиенту.

Если основное письмо приходит администратору, но автоответ клиенту нет, проверьте:

  • включён ли Mail (2);
  • правильный ли To в Mail (2);
  • используется ли правильный тег email клиента;
  • не попадает ли автоответ в спам;
  • не блокирует ли SMTP массовые одинаковые автоответы.

Проверьте вложения

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

Проверьте:

  • размер файла;
  • разрешённые расширения;
  • лимиты PHP upload_max_filesize и post_max_size;
  • поле File attachments во вкладке Mail;
  • права на временную папку загрузки;
  • не блокирует ли почтовый сервис вложения.

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

Если форма не отправляется или отправляется не всегда, проверьте reCAPTCHA, Akismet, Cloudflare Turnstile, security-плагины и WAF. Иногда они блокируют нормальные заявки.

Проверьте кеш и оптимизацию JavaScript

Страница с формой может ломаться из-за отложенной загрузки JavaScript, минификации, объединения файлов или агрессивного кеша.

Попробуйте исключить из оптимизации:

  • страницу с формой;
  • скрипты Contact Form 7;
  • REST API-запросы;
  • admin-ajax.php, если используется совместимость со старыми решениями;
  • reCAPTCHA-скрипты.

Проверьте сайт после обновлений

Если форма перестала отправлять письма после обновления плагинов или темы, проверьте изменения по шагам. Полезно использовать общий порядок из статьи Сайт WordPress сломался после обновления: что делать.

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

Ставить email клиента в From

Это главная ошибка. Email клиента должен быть в Reply-To, а From должен быть адресом на домене сайта.

Игнорировать предупреждения Contact Form 7

Если плагин показывает ошибку конфигурации, её нужно исправить. Не стоит просто закрывать предупреждение и ждать, что письма будут доходить.

Считать успешную отправку формой доказательством доставки

Сообщение “отправлено” не гарантирует, что письмо дошло. Оно может быть принято WordPress, но отклонено почтовым сервисом.

Не проверять спам

Письма с сайта часто попадают в “Спам”, “Промоакции”, “Уведомления” или блокируются корпоративной почтой.

Ставить несколько SMTP-плагинов

Оставьте один SMTP-плагин. Несколько плагинов могут конфликтовать и перезаписывать настройки PHPMailer.

Не сохранять заявки

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

Не проверять DNS домена

SMTP может быть настроен правильно, но без SPF, DKIM и DMARC письма будут хуже проходить фильтры почтовых сервисов.

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

Contact Form 7 пишет, что сообщение отправлено, но письма нет

  • Проверьте папку “Спам”.
  • Отправьте тест на другой email.
  • Проверьте SMTP-лог.
  • Проверьте From Email.
  • Проверьте SPF, DKIM и DMARC.
  • Проверьте, не блокирует ли получатель письма с сайта.

Contact Form 7 показывает ошибку отправки

  • Проверьте SMTP-настройки.
  • Проверьте wp_mail_failed.
  • Проверьте логи хостинга.
  • Проверьте поле To.
  • Проверьте From и Reply-To.
  • Проверьте Additional headers.

Кнопка отправки крутится бесконечно

  • Откройте Console в браузере.
  • Откройте Network и проверьте запрос формы.
  • Проверьте REST API.
  • Отключите кеш для страницы с формой.
  • Отключите оптимизацию JS для скриптов Contact Form 7.
  • Проверьте security-плагин и WAF.

Письма приходят без данных из формы

  • Проверьте теги в Message body.
  • Сравните названия полей во вкладке Form и Mail.
  • Убедитесь, что используете существующие mail-tags.
  • Проверьте, не пустые ли обязательные поля.

Не работает автоответ Mail (2)

  • Проверьте, включён ли Mail (2).
  • Проверьте поле To в Mail (2).
  • Проверьте email-тег клиента.
  • Проверьте спам у клиента.
  • Проверьте SMTP-лог.

Форма перестала работать после переноса сайта

  • Проверьте SMTP-настройки.
  • Проверьте DNS, SPF, DKIM и DMARC.
  • Проверьте From Email.
  • Проверьте, работает ли доменная почта.
  • Проверьте кеш и REST API.
  • Проверьте, не изменились ли URL сайта.

Краткие AI-friendly ответы

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

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

Как правильно настроить From в Contact Form 7?

В поле From нужно указать email на домене сайта, например Site Name <noreply@example.com>. Email посетителя нужно ставить в Reply-To: [your-email].

Что делать, если форма пишет “отправлено”, но письмо не приходит?

Проверьте спам, SMTP-лог, From Email, SPF/DKIM/DMARC, доставку на другой ящик и сохранение заявок через Flamingo или аналогичный плагин.

Нужно ли настраивать SMTP для Contact Form 7?

Для рабочего сайта — да. SMTP с авторизацией обычно надёжнее, чем PHP mail на хостинге, особенно для заявок, интернет-магазинов и корпоративной почты.

FAQ

Почему Contact Form 7 показывает зелёное сообщение, но письма нет?

Потому что форма могла успешно передать письмо в WordPress, но дальше оно не дошло до ящика: попало в спам, отклонено почтовым сервером, заблокировано из-за SPF/DKIM/DMARC или не записано в лог доставки.

Что указывать в поле To?

В поле To нужно указать email, на который должны приходить заявки. Например info@example.com. Для нескольких получателей используйте корректное разделение через запятую.

Что указывать в поле From?

В поле From лучше указать доменный адрес сайта: Site Name <noreply@example.com> или Site Name <info@example.com>. Не ставьте туда email посетителя.

Почему нельзя ставить [your-email] в From?

Потому что сайт будет пытаться отправить письмо от имени чужого домена. Почтовые сервисы считают это подозрительным и могут отклонить письмо или отправить его в спам.

Как сделать, чтобы можно было ответить клиенту?

Добавьте в Additional headers строку Reply-To: [your-email]. Тогда письмо будет отправляться от домена сайта, но при ответе менеджер будет отвечать на email клиента.

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

После обновления могли измениться проверки конфигурации, сломаться Additional headers, появиться конфликт с темой, кешем, SMTP-плагином или security-плагином. Проверьте предупреждения во вкладке Mail и логи отправки.

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

Настройте сохранение заявок в базе через Flamingo или другой плагин. Тогда даже при проблемах с почтой вы сможете увидеть отправленные формы в админке WordPress.

Что делать, если Contact Form 7 зависает при отправке?

Проверьте 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-записи и сохранение заявок в базе.

Об авторе

vkuzyomko administrator