Краткий ответ: письма WordPress попадают в спам чаще всего из-за отправки через PHP mail() без нормальной авторизации домена, отсутствия SPF/DKIM/DMARC, неправильного поля From, использования email посетителя как отправителя, плохой репутации IP хостинга, неверных заголовков, слабого SMTP, подозрительного текста письма или конфликта плагинов формы.
Главная ошибка — думать, что если WordPress вызвал wp_mail(), значит письмо точно доставлено. Это не так. WordPress может успешно передать письмо серверу, но Gmail, Outlook, корпоративная почта или антиспам всё равно отправят его в спам или отклонят.
WordPress не является полноценным почтовым сервисом. Когда сайт отправляет заявку, письмо о заказе, сброс пароля или уведомление администратора, обычно используется функция wp_mail(). Дальше письмо уходит через почтовую систему хостинга или через SMTP-плагин.
Если письмо выглядит для почтового сервера подозрительно, оно попадает в спам. Чаще всего проблема не в самой форме, а в доверии к отправителю.
Если письма не просто попадают в спам, а вообще не отправляются, сначала нужно проверить базовую отправку: не отправляются письма WordPress. Если проблема только с формой, отдельно проверьте настройки из статьи Contact Form 7 не отправляет письма.
| Проблема | Как это выглядит для почтовика | Что делать |
|---|---|---|
| Нет SMTP | Письмо отправлено сервером сайта без нормальной авторизации | Настроить SMTP или транзакционный email-сервис |
| Нет SPF | Не понятно, имеет ли сервер право отправлять от имени домена | Добавить SPF-запись в DNS |
| Нет DKIM | Письмо не подписано доменным ключом | Включить DKIM у почтового сервиса |
| Нет DMARC | Нет политики проверки SPF/DKIM | Добавить DMARC-запись |
| Неверный From | Сайт отправляет письмо от имени чужого домена | Использовать email на домене сайта |
| Плохой Return-Path | Технический отправитель не совпадает с доменом | Настроить SMTP и envelope sender |
| Плохая репутация IP | Сервер уже замечен в массовой рассылке | Использовать нормальный SMTP-сервис |
| Подозрительный контент | Письмо похоже на спам по тексту или HTML | Упростить текст, тему и шаблон |
Диагностику нужно делать по цепочке: WordPress создал письмо, SMTP его отправил, домен прошёл проверку, получатель принял письмо, антиспам не отправил его в junk.
| Симптом | Вероятная причина | Что проверить |
|---|---|---|
| Письмо приходит только в спам Gmail | Недоверие к домену или IP | SPF, DKIM, DMARC, SMTP, контент письма |
| Письмо приходит в спам Outlook | Репутация IP, SPF/DKIM, фильтры Microsoft | SMTP-сервис, заголовки, доменную авторизацию |
| Письмо с формы в спаме, обычное письмо нет | Форма создаёт плохие headers | From, Reply-To, mail-tags, шаблон письма |
| Письма WooCommerce в спаме | From, SMTP, HTML-шаблон, доменная авторизация | WooCommerce emails, SMTP, DNS |
| Письмо отправлено через сервер хостинга | PHP mail() без доверия | Настроить SMTP |
| SPF passed, DKIM failed | Нет подписи или неверный DKIM | Настройки почтового сервиса и DNS |
| DKIM passed, DMARC failed | Нет выравнивания доменов | From domain, Return-Path, DKIM domain |
| Письмо с коротким текстом в спаме | Похоже на пустое или техническое письмо | Subject, message body, HTML |
Если не хотите рисковать сайтом и тратить время на эксперименты, можно оставить заявку. Я посмотрю задачу и предложу аккуратное решение.
Исправлять попадание писем WordPress в спам нужно не одним плагином, а настройкой всей почтовой цепочки: From, SMTP, DNS, заголовки, содержание письма и логи.
В поле From должен быть email на домене сайта.
Правильно:
Неправильно:
Email посетителя формы лучше ставить в Reply-To. Тогда менеджер сможет ответить клиенту, но письмо будет отправлено от домена сайта.
SMTP заменяет отправку через PHP mail() на авторизованную отправку через почтовый сервер. Для бизнес-сайта это почти всегда лучше, чем доверять почте хостинга.
SMTP без DNS-записей может не решить проблему полностью. Почтовик должен видеть, что домен разрешил этому серверу отправлять письма.
DNS-записи нужно брать у вашего почтового сервиса или SMTP-провайдера. Нельзя копировать чужие SPF/DKIM-записи из интернета — они не будут работать для вашего домена.
Для Contact Form 7, WPForms, Elementor Form, Fluent Forms и других форм логика одинаковая: сайт отправляет письмо от себя, а email посетителя указывается для ответа.
Пример правильной схемы:
Даже при правильном SMTP письмо может попасть в спам из-за содержания.
WooCommerce отправляет письма о заказах, статусах, аккаунтах, сбросе пароля и уведомления администратору. Если они попадают в спам, проверьте From address в WooCommerce, SMTP, DNS и HTML-шаблоны писем.
Если письма магазина вообще не уходят или приходят нестабильно, используйте отдельную диагностику: WooCommerce не отправляет письма.
Важно: код ниже предназначен для диагностики и базовой настройки отправителя. Перед правками сделайте бэкап. Если у вас уже есть SMTP-плагин, который задаёт From email, не дублируйте эти настройки через functions.php без проверки.
Куда вставлять: в файл 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. Проверьте, попало ли оно во входящие или в спам.'
);
if ($sent) {
wp_die('Тестовое письмо отправлено на: ' . esc_html($admin_email));
}
wp_die('wp_mail вернул false. Проверьте SMTP, debug.log и wp_mail_failed.');
}
После вставки откройте в админке:
/wp-admin/?sc_test_wp_mail=1
Важно: используйте этот код только если отправитель не задаётся SMTP-плагином. Если SMTP-плагин уже управляет From, настройте отправителя в нём.
<?php
add_filter('wp_mail_from', 'sc_set_wp_mail_from');
function sc_set_wp_mail_from($email) {
return 'noreply@example.com';
}
add_filter('wp_mail_from_name', 'sc_set_wp_mail_from_name');
function sc_set_wp_mail_from_name($name) {
return 'Example Site';
}
Замените noreply@example.com и Example Site на реальные данные вашего сайта.
Куда вставлять: Contact Form 7 → ваша форма → вкладка Mail.
To: manager@example.com
From: Example Site <noreply@example.com>
Subject: Новая заявка с сайта
Additional headers: Reply-To: [your-email]
В поле From должен быть доменный email сайта. Email пользователя формы должен быть в Reply-To.
Важно: не меняйте глобально тип всех писем на HTML без понимания последствий. Некоторые плагины ожидают text/plain. Лучше настраивать HTML в конкретном плагине формы или WooCommerce.
<?php
add_filter('wp_mail_content_type', 'sc_set_html_mail_content_type');
function sc_set_html_mail_content_type($content_type) {
return 'text/html';
}
Если используете этот фильтр временно, после отправки конкретного письма его нужно снимать, чтобы не изменить формат всех писем сайта.
После правильной настройки письма WordPress должны приходить во входящие стабильнее. Почтовик должен видеть, что письмо отправлено авторизованно, домен подтверждён через DNS, From не подделан, а содержание письма не похоже на спам.
Подходит для большинства WordPress-сайтов. Это самый быстрый способ уйти от ненадёжного PHP mail() хостинга.
Плюсы: проще настроить, есть тестовая отправка, часто есть email logs.
Минусы: нужно правильно указать сервер, порт, шифрование, логин и пароль.
Подходит для сайтов, где письма важны для бизнеса: заявки, заказы, доступы, счета, восстановление пароля.
Плюсы: лучше логи, доставляемость, статистика и контроль ошибок.
Минусы: нужен внешний сервис, тариф и настройка DNS.
Подходит, если сайт отправляет немного писем и нужно просто получать заявки с формы.
Плюсы: понятная схема, письма идут от домена сайта.
Минусы: не все почтовые хостинги хорошо подходят для большого количества транзакционных писем.
Подходит, если потеря письма критична. Email лучше считать уведомлением, а не единственным хранилищем заявки.
Плюсы: заявка не пропадает, даже если письмо попало в спам.
Минусы: нужно защищать персональные данные и следить за сроком хранения.
Почтовые настройки часто содержат SMTP-пароли, API-ключи и персональные данные клиентов. Поэтому нельзя хранить их в открытом JavaScript, публичных файлах темы или выводить в debug-ответы.
Почтовая отправка может влиять не только на доставляемость, но и на скорость форм или checkout. Если SMTP отвечает медленно, пользователь может долго ждать отправку формы или оформление заказа.
SMTP помогает отправлять письмо, но без SPF, DKIM и DMARC почтовый сервис всё равно может не доверять отправителю.
Это выглядит как подделка отправителя. Сайт не имеет права отправлять письма от имени gmail.com, outlook.com или другого чужого домена.
Без заголовков невозможно понять, прошли ли SPF, DKIM и DMARC. Внешне письмо может выглядеть нормально, но технически проваливать проверку.
Gmail, Outlook и корпоративная почта могут фильтровать по-разному. Нужно тестировать несколько получателей.
Форма может показать успех, потому что WordPress обработал запрос. Это не значит, что письмо попало во входящие.
Письма с пустой темой, коротким текстом и непонятным отправителем часто выглядят подозрительно для антиспама.
На общем хостинге IP может иметь плохую репутацию из-за других сайтов. Для важных писем лучше использовать отдельный SMTP-сервис.
Если заявка существует только как email, она может потеряться в spam. Лучше сохранять её в WordPress, CRM или отдельном журнале.
WordPress письма попадают в спам из-за отправки через PHP mail(), отсутствия SMTP, SPF, DKIM, DMARC, неправильного From, плохой репутации IP, подозрительных заголовков или слабого содержания письма.
Сначала проверьте From email, SMTP, SPF, DKIM, DMARC и заголовки письма. Затем проверьте настройки формы, содержание письма и email logs.
Лучше использовать email на домене сайта, например noreply@example.com или info@example.com. Email пользователя формы нужно ставить в Reply-To, а не в From.
SMTP часто помогает, но только если вместе с ним настроены SPF, DKIM, DMARC и правильный доменный From email.
Почтовые сервисы не доверяют письмам, если они отправлены без SMTP, без SPF/DKIM/DMARC, с неправильным From, через плохой IP или с подозрительным содержанием.
Форма может успешно передать письмо WordPress, но почтовый сервис получателя сам решает, положить его во входящие или в спам. Нужно проверять SMTP, DNS и заголовки.
Да, для сайта с заявками, WooCommerce или регистрацией SMTP почти всегда нужен. Он делает отправку авторизованной и помогает видеть ошибки.
SPF — это DNS-запись, которая указывает, какие серверы имеют право отправлять письма от имени вашего домена.
DKIM — это цифровая подпись письма. Она помогает почтовику проверить, что письмо действительно отправлено доменом и не было изменено по пути.
DMARC — это политика домена, которая говорит почтовым сервисам, что делать с письмами, если SPF или DKIM не прошли проверку.
Не стоит. Если сайт отправляет письмо от имени Gmail, но не является сервером Gmail, почтовик может считать это подделкой. Лучше использовать email на домене сайта.
Причины те же: неправильный From, нет SMTP, нет SPF/DKIM/DMARC, плохой HTML-шаблон, вложения, репутация IP или проблемы почтового сервиса.
Частично да: можно задать правильный From и настроить DNS. Но для нормальной авторизованной отправки чаще всего нужен SMTP-плагин или транзакционный email-сервис.
Возможные причины: не настроены SPF/DKIM/DMARC, не совпадает домен From, плохая репутация отправителя, подозрительный текст письма или неверный Return-Path.
Если WordPress письма попадают в спам, причина обычно не в одном плагине формы. Нужно проверить всю почтовую цепочку: From, Reply-To, wp_mail(), SMTP, SPF, DKIM, DMARC, Return-Path, заголовки, содержание письма и репутацию отправителя.
Надёжная схема выглядит так: сайт отправляет письма через SMTP или транзакционный email-сервис, From находится на домене сайта, Reply-To содержит email пользователя, DNS-записи подтверждают отправителя, а важные заявки сохраняются в базе или CRM. Тогда письма WordPress перестают выглядеть как подозрительная почта с хостинга и чаще попадают во входящие.
Об авторе