Краткий ответ: если не отправляются письма WordPress, чаще всего проблема в PHP mail на хостинге, неправильном адресе отправителя, отсутствии SMTP, ошибках SPF/DKIM/DMARC, конфликте плагина формы, блокировке портов или попадании писем в спам. Надёжное решение — проверить wp_mail(), включить лог ошибок, настроить SMTP с авторизацией, указать правильный From Email и проверить DNS-записи домена.
WordPress сам по себе не является полноценным почтовым сервером. Для отправки уведомлений он использует функцию wp_mail(), а дальше письмо передаётся через PHP mail, PHPMailer, SMTP-плагин или внешний почтовый сервис.
Проблема в том, что PHP mail на обычном хостинге часто настроен слабо: письма могут не уходить, попадать в спам, отклоняться почтовыми сервисами или отправляться от технического адреса сервера. Поэтому ситуация “форма на сайте отправлена, но письмо не пришло” — очень частая для WordPress.
Важно разделять две разные проблемы:
Функция wp_mail() может вернуть успешный результат, но это ещё не гарантирует, что пользователь реально получил письмо. Поэтому диагностику нужно делать не только в WordPress, но и на уровне SMTP, DNS, почтового ящика и логов.
Сначала нужно понять, где ломается цепочка: форма, WordPress, wp_mail(), SMTP, хостинг, DNS или почтовый ящик получателя.
| Симптом | Вероятная причина | Где проверять |
|---|---|---|
| Не приходят письма с формы | Ошибка настроек формы, wp_mail или SMTP | плагин формы, SMTP-лог, wp_mail_failed |
| Не приходят письма WooCommerce | Шаблоны email, статус заказа, SMTP, From Email | WooCommerce → Email, логи, SMTP-плагин |
| Тестовое SMTP-письмо отправляется, а форма нет | Проблема в плагине формы или адресе получателя | настройки формы, поля To/From/Reply-To |
| Письма уходят, но попадают в спам | SPF, DKIM, DMARC, репутация домена, From Email | DNS-записи, заголовки письма, почтовый сервис |
| Письма не уходят после переноса | Изменились DNS, SMTP, PHP mail, хостинг или порт | панель хостинга, DNS, SMTP, wp-config.php |
| Ошибка SMTP authentication failed | Неверный логин, пароль, app password или encryption | SMTP-плагин, почтовый сервис, двухфакторная защита |
| Письма отправляются не от того адреса | Неверный From Email или перезапись заголовков | SMTP-плагин, плагин формы, WooCommerce |
Если письма перестали отправляться после переноса сайта, проверьте не только WordPress, но и доменные DNS-записи. Подробно этапы переноса описаны в статье Перенос сайта WordPress на другой хостинг без потери данных.
Самое надёжное решение — не пытаться заставить PHP mail работать на хостинге, а настроить отправку через SMTP или API почтового сервиса. Тогда письма будут уходить с авторизацией от реального домена, а не от случайного технического сервера.
Сначала нужно понять, срабатывает ли сама функция отправки WordPress. Это можно проверить через SMTP-плагин, тестовую отправку или временный код.
Если тест wp_mail() не проходит, проблема может быть в PHP mail, хостинге, PHPMailer, блокировке отправки или конфликте плагинов.
Для большинства сайтов лучше использовать SMTP-плагин. Он заменяет стандартную отправку WordPress на отправку через почтовый сервер с авторизацией.
В настройках SMTP обычно нужны:
Для Gmail, Google Workspace, Microsoft 365 и некоторых других сервисов обычный пароль от ящика часто не подходит. Может понадобиться пароль приложения, OAuth или отдельная интеграция через API.
Отправитель должен быть на том же домене, что и сайт. Например, если сайт находится на example.com, лучше использовать адрес:
noreply@example.com
info@example.com
support@example.com
Плохой вариант — отправлять с адреса Gmail, Yahoo или чужого домена через сервер сайта. Такие письма часто попадают в спам или отклоняются.
Даже если SMTP работает, письма могут не доходить без правильной проверки домена.
Если вы подключаете новый SMTP-сервис, его нужно добавить в SPF. Если этого не сделать, письма могут попадать в спам или отклоняться.
Если тестовое SMTP-письмо приходит, а письма с формы нет, проблема почти точно в форме.
Проверьте:
WooCommerce отправляет письма не только через SMTP, но и по своим условиям: статус заказа, шаблон письма, включение уведомления, email получателя.
Проверьте:
Если сайт на WooCommerce работает медленно или письма зависают при оформлении заказа, проверьте также техническую оптимизацию магазина в статье Как ускорить WooCommerce: практическое руководство для магазина WordPress.
Даже при правильной настройке хостинг может ограничивать отправку писем. Это часто бывает на дешёвых тарифах или после подозрения на спам.
Уточните:
Важно: код ниже влияет на отправку писем, диагностику ошибок и обработку email-уведомлений. Перед добавлением сделайте backup. Лучше вставлять код в небольшой отдельный плагин или в functions.php дочерней темы, а не в основную тему.
Куда вставлять: временно в functions.php дочерней темы или в отдельный тестовый плагин. После проверки код нужно удалить.
add_action('init', function () {
if (!isset($_GET['test_wp_mail'])) {
return;
}
if (!current_user_can('manage_options')) {
wp_die('Access denied');
}
$to = get_option('admin_email');
$subject = 'WordPress 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, hosting mail logs and wp_mail_failed hook.');
});
После добавления откройте адрес:
https://example.com/?test_wp_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));
}
});
Куда вставлять: functions.php дочерней темы или отдельный плагин. Используйте только если ваши письма действительно должны быть HTML.
add_filter('wp_mail_content_type', function () {
return 'text/html';
});
Важно: если включить HTML-тип глобально, это может повлиять на письма разных плагинов. Лучше использовать такой фильтр точечно внутри конкретной отправки.
Куда вставлять: отдельный мини-плагин. Не храните пароль в публичном репозитории. Для обычного сайта проще и безопаснее использовать 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 в корневой папке WordPress.
wp cron event list
Если письма перестали отправляться после обновления, проверьте активные плагины.
wp plugin list --status=active
После правильной настройки WordPress должен стабильно отправлять письма с форм, уведомления администратора, письма WooCommerce, сброс пароля, регистрацию пользователей и системные уведомления.
Хороший результат выглядит так:
Проверьте заголовки письма. В них обычно видно, прошли ли SPF, DKIM и DMARC. Если хотя бы одна из проверок не проходит, почтовые сервисы могут понижать доверие к письму.
Также проверьте:
Письмо сброса пароля отправляется через wp_mail(). Если оно не приходит, проверьте SMTP, From Email, спам, логи отправки и корректность email пользователя.
Если из-за этого нельзя войти в админку, используйте инструкцию Не работает админка WordPress: причины и способы восстановления доступа.
Проверьте, какие плагины обновлялись. Часто проблема появляется после обновления плагина формы, SMTP-плагина, WooCommerce, темы или security-плагина.
Действуйте аккуратно:
Это значит, что транспорт отправки работает, а ошибка находится в конкретной форме или её настройках.
Проверьте:
После взлома хостинг может ограничить отправку писем, а домен или IP могут попасть в спам-базы. Сначала нужно очистить сайт, сменить пароли, проверить неизвестных администраторов и остановить спам-рассылку.
Для полной проверки используйте инструкцию Как удалить вирус с сайта WordPress.
Иногда письма доходят на Gmail, но не доходят на корпоративную почту, или наоборот. Это обычно связано с политиками принимающего сервера, SPF/DKIM/DMARC, blacklist, вложениями или строгой фильтрацией.
Так делать нельзя. Если пользователь ввёл Gmail-адрес, а сайт отправляет письмо как будто от этого Gmail, письмо почти наверняка вызовет проблемы с проверкой отправителя. Email посетителя лучше ставить в Reply-To.
Если вы подключили внешний SMTP-сервис, но не добавили его в SPF домена, часть писем может попадать в спам или отклоняться.
Сообщение формы означает только, что форма обработала запрос. Оно не гарантирует, что письмо дошло до получателя.
Иногда письма отправляются, но лежат в папке “Спам”, “Промоакции”, “Уведомления” или блокируются корпоративным фильтром.
Несколько SMTP-плагинов могут конфликтовать между собой и перезаписывать настройки PHPMailer. Оставьте один основной инструмент отправки.
После переноса сайта или DNS старые MX, SPF и DKIM могут перестать соответствовать текущей почте. Из-за этого письма перестают доходить или попадают в спам.
Без лога сложно понять, письмо не отправилось или просто не дошло. Для бизнес-сайта, интернет-магазина и заявок логирование email — почти обязательная часть диагностики.
Чаще всего причина в PHP mail на хостинге, отсутствии SMTP, неправильном From Email, ошибках SPF/DKIM/DMARC, конфликте плагина формы или блокировке отправки на сервере.
Настройте SMTP с авторизацией, укажите отправителя на домене сайта, проверьте SPF, DKIM и DMARC, включите лог отправки и протестируйте wp_mail(), форму и WooCommerce отдельно.
Значит, отправка на уровне SMTP работает, а проблема в настройках формы: To, From, Reply-To, шаблон письма, антиспам, AJAX или конфликт плагинов.
Чаще всего из-за неправильного From Email, отсутствия SPF/DKIM/DMARC, плохой репутации домена или IP, подозрительного текста письма, вложений или несоответствия отправителя домену.
WordPress использует wp_mail(), но доставка зависит от настроек сервера, PHP mail, PHPMailer, DNS домена и почтовых фильтров. На многих хостингах стандартная отправка работает нестабильно.
Для большинства рабочих сайтов — да. SMTP с авторизацией обычно надёжнее, чем стандартная PHP mail, особенно для форм, заявок, WooCommerce и сброса пароля.
Лучше указывать адрес на домене сайта, например info@example.com или noreply@example.com. Email посетителя формы ставьте в Reply-To, а не в From.
Проверьте включение email-уведомления, статус заказа, email получателя, SMTP-лог, From Email, шаблоны email в теме и ошибки WooCommerce.
Письмо сброса пароля отправляется через wp_mail(). Если оно не приходит, проверьте SMTP, спам, правильность email пользователя, From Email и логи отправки.
Уточните у хостинга доступные порты и ограничения. Если порты SMTP закрыты, используйте почтовый сервис с API-интеграцией или попросите хостинг открыть нужный порт.
Да, через phpmailer_init в коде. Но для обычного сайта удобнее использовать SMTP-плагин, потому что он даёт настройки, тестовую отправку, логирование и меньше риска ошибиться с паролем.
Проверьте последние обновления, настройки SMTP, DNS-записи, лимиты хостинга, спам, blacklist, изменения домена, перенос сайта и логи отправки.
Если письма WordPress не отправляются, заявки с форм теряются или WooCommerce не присылает уведомления о заказах, лучше сначала провести техническую диагностику, а не менять настройки наугад.
Если не отправляются письма WordPress, не ограничивайтесь проверкой одной формы. Нужно проверить всю цепочку: wp_mail(), SMTP, From Email, DNS-записи SPF/DKIM/DMARC, хостинг, форму, WooCommerce, спам и логи. Самый стабильный вариант для рабочего сайта — отправка через SMTP или почтовый API с правильной авторизацией домена.
Об авторе