Краткий ответ: заявки с сайта WordPress чаще всего не приходят из-за неправильных настроек формы, проблем с wp_mail(), отсутствия SMTP, ошибок SPF/DKIM/DMARC, попадания писем в спам, reCAPTCHA/антиспама, JavaScript-ошибок, кеша, неверного email получателя, конфликта плагинов или сбоя интеграции с CRM/Telegram. Исправлять нужно по цепочке: форма → отправка WordPress → SMTP → DNS почты → антиспам → логи → интеграции.
Важно понять, что “не приходят заявки” — это не всегда проблема почты. Иногда форма вообще не отправляется. Иногда отправляется, но письмо не создаётся. Иногда письмо создано, но почтовый сервер его отклоняет. Иногда заявка ушла в CRM или Telegram, но менеджер не получил уведомление. Поэтому диагностику нужно делать не наугад, а по этапам.
WordPress сам по себе не является полноценным почтовым сервером. Большинство форм передают данные в PHP, затем WordPress вызывает wp_mail(), а дальше письмо уходит через PHP mail() хостинга или через SMTP-плагин, если он настроен.
Если любой участок этой цепочки работает неправильно, заявка может потеряться или не дойти до менеджера.
Если на сайте не отправляются не только заявки, но и любые системные письма WordPress, сначала нужно проверить общую отправку почты: не отправляются письма WordPress. Если проблема только в Contact Form 7, полезно отдельно проверить настройки формы по статье Contact Form 7 не отправляет письма.
| Этап | Что происходит | Что может сломаться |
|---|---|---|
| Фронтенд формы | Пользователь заполняет поля и нажимает кнопку | JS-ошибка, неверная валидация, кнопка не работает |
| AJAX/POST-запрос | Форма отправляет данные на сервер | 403, 400, 500, кеш, WAF, security-плагин |
| Плагин формы | Contact Form 7, WPForms, Elementor или другой плагин обрабатывает данные | Ошибки mail-tags, неправильные настройки уведомлений |
| wp_mail() | WordPress пытается создать письмо | Ошибка PHPMailer, неверные headers, плохой From |
| SMTP или PHP mail | Сервер отправляет письмо | Блокировка хостинга, неверный SMTP, таймаут |
| Почтовый сервер получателя | Почта принимает или отклоняет письмо | SPF/DKIM/DMARC, спам-фильтр, репутация домена |
| CRM/Telegram | Заявка передаётся в стороннюю систему | API token, webhook, timeout, неправильные поля |
| Менеджер | Получает письмо или уведомление | Спам, неправильный ящик, фильтры почты, нет доступа к чату |
Диагностику нужно начинать с простого теста: форма показывает успешную отправку или ошибку. Это сразу разделяет проблему на две группы: форма не отправляется или отправляется, но заявка не доставляется.
| Симптом | Вероятная причина | Что проверять |
|---|---|---|
| Форма показывает успех, письма нет | Проблема доставки email | SMTP, SPF, DKIM, DMARC, spam, email logs |
| Форма показывает красную ошибку | Проблема отправки почты или сервера | wp_mail(), SMTP, debug.log, хостинг |
| Форма показывает оранжевую ошибку | Антиспам считает заявку подозрительной | reCAPTCHA, Akismet, spam filters |
| Кнопка не реагирует | JavaScript или конфликт темы | Console, оптимизация JS, тема, плагины |
| AJAX возвращает 403 | Security-плагин, WAF, nonce, reCAPTCHA | Network, firewall, security rules |
| AJAX возвращает 500 | PHP-ошибка | debug.log, error_log, PHP version |
| Заявка приходит на Gmail, но не на доменную почту | Проблема почтового сервера получателя | Почтовые логи, MX, фильтры, SPF/DKIM/DMARC |
| Письмо приходит без части данных | Неверные mail-tags или имена полей | Настройки формы, template письма |
| CRM получает заявку, email нет | Разные каналы уведомлений | Настройки email-уведомления и CRM webhook |
Если не хотите рисковать сайтом и тратить время на эксперименты, можно оставить заявку. Я посмотрю задачу и предложу аккуратное решение.
Исправление лучше делать по слоям. Сначала убедиться, что форма отправляется. Затем проверить настройки уведомления. После этого — wp_mail(), SMTP, DNS, антиспам и интеграции.
Одна из частых ошибок — ставить email пользователя в поле From. Почтовые сервисы могут отклонять такие письма, потому что сайт пытается отправить письмо от имени чужого домена.
Правильная логика:
Так менеджер сможет нажать “Ответить”, но само письмо будет отправлено от домена сайта.
Для коммерческого сайта лучше не полагаться на PHP mail() хостинга. SMTP даёт авторизованную отправку через почтовый сервер и обычно позволяет видеть логи.
Даже если SMTP отправляет письмо, почтовый сервис получателя может положить его в спам или отклонить. Для нормальной доставляемости домен должен подтверждать право отправки писем.
Если форма показывает ошибку антиспама, заявка может вообще не попадать в отправку. В Contact Form 7 оранжевая ошибка часто связана с подозрением на спам, а красная — с проблемой отправки письма или сервера.
Письмо — это уведомление, а не надёжное хранилище заявок. Если заявка важна для бизнеса, её лучше сохранять в админке WordPress, CRM или отдельной таблице. Тогда даже при сбое email заявка не потеряется.
Для продаж и обработки обращений полезна связка: форма сохраняет заявку локально, отправляет email, дублирует уведомление в Telegram и передаёт данные в CRM. Для быстрых уведомлений можно использовать интеграцию WordPress с Telegram.
Кеш редко ломает отправку письма напрямую, но может ломать форму: устаревший nonce, кешированный HTML, отложенный JS, заблокированный AJAX, конфликт с reCAPTCHA.
Важно: код ниже предназначен для диагностики и страховочного сохранения заявок. Не вставляйте все сниппеты сразу на рабочий сайт. Перед правками сделайте бэкап. Не храните лишние персональные данные дольше, чем нужно для обработки заявки.
Куда вставлять: в файл wp-config.php перед строкой /* That’s all, stop editing! */.
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
Куда вставлять: во временный служебный плагин или в functions.php дочерней темы. Лучше использовать отдельный плагин, чтобы не потерять код при смене темы.
<?php
if (!defined('ABSPATH')) {
exit;
}
add_action('wp_mail_failed', 'sc_log_wp_mail_failed');
function sc_log_wp_mail_failed($wp_error) {
if (!is_wp_error($wp_error)) {
return;
}
error_log('================ SC WP MAIL FAILED ================');
error_log('Message: ' . $wp_error->get_error_message());
$error_data = $wp_error->get_error_data();
if (!empty($error_data) && is_array($error_data)) {
if (!empty($error_data['to'])) {
error_log('To: ' . print_r($error_data['to'], true));
}
if (!empty($error_data['subject'])) {
error_log('Subject: ' . $error_data['subject']);
}
if (!empty($error_data['headers'])) {
error_log('Headers: ' . print_r($error_data['headers'], true));
}
}
error_log('====================================================');
}
Важно: этот код отправляет письмо администратору сайта. Используйте только для диагностики и удалите после проверки.
Куда вставлять: временно в functions.php дочерней темы или в отдельный служебный плагин.
<?php
add_action('admin_init', 'sc_test_wp_mail_from_admin');
function sc_test_wp_mail_from_admin() {
if (!current_user_can('manage_options')) {
return;
}
if (empty($_GET['sc_test_wp_mail'])) {
return;
}
$admin_email = get_option('admin_email');
$sent = wp_mail(
$admin_email,
'Test wp_mail from WordPress',
'Это тестовое письмо WordPress. Если оно пришло, wp_mail работает.'
);
if ($sent) {
wp_die('Тестовое письмо отправлено на: ' . esc_html($admin_email));
}
wp_die('wp_mail вернул false. Проверьте debug.log, SMTP, хостинг и wp_mail_failed.');
}
После вставки откройте в админке:
/wp-admin/?sc_test_wp_mail=1
Важно: этот код не сохраняет заявку полностью, а только помогает понять, сработал ли hook после успешной отправки Contact Form 7.
<?php
add_action('wpcf7_mail_sent', 'sc_log_cf7_mail_sent');
function sc_log_cf7_mail_sent($contact_form) {
if (!function_exists('WPCF7_Submission')) {
return;
}
$submission = WPCF7_Submission::get_instance();
if (!$submission) {
error_log('SC CF7: Submission instance not found.');
return;
}
$posted_data = $submission->get_posted_data();
error_log('================ SC CF7 MAIL SENT ================');
error_log('Form ID: ' . (int) $contact_form->id());
error_log('Form title: ' . sanitize_text_field($contact_form->title()));
if (!empty($posted_data['your-email'])) {
error_log('User email: ' . sanitize_email($posted_data['your-email']));
}
error_log('==================================================');
}
Важно: этот пример создаёт записи в админке. Перед использованием продумайте срок хранения заявок и доступ к ним, потому что там могут быть персональные данные.
Куда вставлять: лучше в отдельный мини-плагин.
<?php
if (!defined('ABSPATH')) {
exit;
}
add_action('init', 'sc_register_lead_post_type');
function sc_register_lead_post_type() {
register_post_type('sc_lead', array(
'labels' => array(
'name' => 'Заявки',
'singular_name' => 'Заявка',
),
'public' => false,
'show_ui' => true,
'show_in_menu' => true,
'supports' => array('title', 'editor'),
'capability_type' => 'post',
));
}
add_action('wpcf7_before_send_mail', 'sc_save_cf7_lead_before_mail');
function sc_save_cf7_lead_before_mail($contact_form) {
if (!function_exists('WPCF7_Submission')) {
return;
}
$submission = WPCF7_Submission::get_instance();
if (!$submission) {
return;
}
$posted_data = $submission->get_posted_data();
$name = isset($posted_data['your-name']) ? sanitize_text_field($posted_data['your-name']) : '';
$email = isset($posted_data['your-email']) ? sanitize_email($posted_data['your-email']) : '';
$phone = isset($posted_data['your-phone']) ? sanitize_text_field($posted_data['your-phone']) : '';
$message = isset($posted_data['your-message']) ? sanitize_textarea_field($posted_data['your-message']) : '';
$lead_title = 'Заявка от ' . current_time('Y-m-d H:i:s');
if (!empty($name)) {
$lead_title = 'Заявка от ' . $name;
}
$content = '';
$content .= 'Имя: ' . $name . "n";
$content .= 'Email: ' . $email . "n";
$content .= 'Телефон: ' . $phone . "n";
$content .= 'Сообщение: ' . $message . "n";
wp_insert_post(array(
'post_type' => 'sc_lead',
'post_status' => 'private',
'post_title' => $lead_title,
'post_content' => $content,
));
}
В настройках Contact Form 7 во вкладке Mail лучше использовать доменный email в From, а email пользователя — в Reply-To.
To: manager@example.com
From: Site Name <noreply@example.com>
Subject: Новая заявка с сайта
Additional headers: Reply-To: [your-email]
Замените example.com на домен сайта. Не используйте в From чужой Gmail, Mail.ru, Outlook или email посетителя формы.
После правильной настройки заявка должна проходить весь путь: пользователь отправляет форму, сайт принимает данные, WordPress создаёт письмо, SMTP отправляет его, почтовый сервис принимает письмо, менеджер получает уведомление, а резервная копия заявки остаётся в админке или CRM.
Подходит почти для любого WordPress-сайта с формами. SMTP делает отправку писем более предсказуемой, чем PHP mail() на хостинге.
Плюсы: быстрее найти ошибку, есть тестовая отправка, часто есть email logs.
Минусы: нужно правильно настроить домен, порт, шифрование и авторизацию.
Подходит, если заявки важны и не должны зависеть только от email.
Плюсы: заявка не теряется, даже если письмо не дошло.
Минусы: нужно защищать персональные данные и чистить старые заявки.
Подходит для быстрых уведомлений менеджеру. Telegram не заменяет CRM или email, но помогает быстрее увидеть новое обращение.
Плюсы: быстро, удобно для отдела продаж.
Минусы: нужно защищать token, chat_id и не отправлять лишние персональные данные.
Подходит, если заявки нужно обрабатывать по воронке продаж, назначать менеджеров, хранить статусы и UTM-метки.
Плюсы: нормальная история обработки лидов.
Минусы: нужна корректная интеграция, логи и повторная отправка при ошибке API.
Подходит, если сайт постоянно отправляет важные уведомления: заявки, заказы, доступы, счета, восстановление пароля.
Плюсы: лучше логи и контроль доставляемости.
Минусы: внешний сервис, тарифы и настройка DNS.
Формы сайта часто собирают имя, телефон, email и сообщение. Это персональные данные. Поэтому нельзя просто писать все заявки в открытый лог или отправлять их в публичный чат.
Форма должна отправляться быстро. Если при отправке сайт одновременно создаёт заявку, отправляет email, пишет в CRM, отправляет Telegram, проверяет reCAPTCHA и делает внешний API-запрос, пользователь может ждать слишком долго.
Заявка может попасть в spam, promotions, junk, quarantine или фильтр корпоративной почты. Нужно проверить все папки и почтовые логи.
Это ломает доверие почтовых серверов. В From должен быть email домена сайта, а email пользователя лучше ставить в Reply-To.
Зелёное сообщение часто означает, что форма передала данные обработчику. Это не гарантия, что письмо дошло до менеджера.
Если заявка существует только как email, она может потеряться. Для бизнеса лучше сохранять её в базе, CRM или хотя бы временном журнале.
Если WordPress не может отправить обычное тестовое письмо, форма тоже не будет надёжно отправлять заявки.
Без SPF, DKIM и DMARC письмо может технически уйти, но быть отклонено или отправлено в спам.
Если просто убрать антиспам, сайт может начать получать мусорные заявки. Лучше настроить антиспам правильно и проверить, что он не блокирует нормальных пользователей.
Если AJAX-запрос формы возвращает 403 или 500, настройка SMTP не поможет. Сначала нужно исправить серверную или frontend-ошибку.
Заявки с WordPress не приходят из-за ошибок формы, неверного email получателя, проблем wp_mail(), отсутствия SMTP, спама, SPF/DKIM/DMARC, reCAPTCHA, AJAX-ошибок, кеша, security-плагинов или сбоя CRM/Telegram-интеграции.
Сначала проверьте, показывает ли форма успешную отправку. Затем проверьте spam, email получателя, настройки формы, тест wp_mail(), SMTP, debug.log, Network и антиспам.
Форма могла успешно передать данные WordPress, но письмо могло попасть в спам, быть отклонено SMTP, не пройти SPF/DKIM/DMARC или не дойти из-за неправильного From/To.
Нужно сохранять заявки в базе или CRM, настроить SMTP, SPF/DKIM/DMARC, вести email logs и дублировать важные уведомления в Telegram или другую систему.
Частые причины: неправильные настройки формы, проблемы wp_mail(), отсутствие SMTP, письмо попадает в спам, неверный From email, нет SPF/DKIM/DMARC или почтовый сервер получателя отклоняет письмо.
Зелёное сообщение не гарантирует доставку письма во входящие. Нужно проверить spam, SMTP logs, wp_mail_failed, DNS-записи домена и настройки Mail в Contact Form 7.
Красная ошибка обычно указывает на проблему отправки письма или сервера. Проверьте SMTP, wp_mail(), debug.log, настройки Mail и ограничения хостинга.
Оранжевая ошибка часто связана с антиспамом. Проверьте reCAPTCHA, Akismet, honeypot, security-плагин, WAF и содержимое тестового сообщения.
Для коммерческого сайта SMTP почти всегда лучше, чем PHP mail() хостинга. Он даёт авторизованную отправку и помогает видеть ошибки доставки.
В From лучше использовать email на домене сайта, например noreply@example.com. Email пользователя нужно ставить в Reply-To, чтобы менеджер мог ответить на заявку.
Да. Кеш может отдавать устаревший nonce, ломать AJAX, задерживать reCAPTCHA или конфликтовать с JS формы. На время диагностики страницу формы лучше исключить из агрессивного кеша.
Потому что CRM-интеграция и email-уведомление — разные каналы. Нужно отдельно проверить настройки email notification, SMTP, recipient и логи CRM webhook.
Да. Заявки можно дублировать в Telegram-чат менеджеров. Но Telegram лучше использовать как дополнительное уведомление, а не единственное место хранения заявок.
Проверьте SMTP-лимиты, антиспам, reCAPTCHA, нагрузку на сервер, email logs, Network, CRM/API timeout и сохранение заявок в базе. Без локального журнала сложно понять, какие заявки потерялись.
Если не приходят заявки с сайта WordPress, нельзя ограничиваться фразой “почта не работает”. Нужно проверить весь путь: форму, AJAX, wp_mail(), SMTP, DNS домена, антиспам, кеш, debug.log, почтовые логи, CRM и Telegram.
Надёжная схема для бизнеса такая: заявка сохраняется в WordPress или CRM, email отправляется через SMTP, домен имеет SPF/DKIM/DMARC, ошибки пишутся в лог, а важные обращения дублируются в Telegram или другую систему. Тогда заявка не зависит только от одного письма и не теряется молча.
Об авторе