Не отправляются письма WordPress: причины и как исправить

Автор:vkuzyomko

Не отправляются письма WordPress: причины и как исправить

Краткий ответ: если не отправляются письма WordPress, чаще всего проблема в PHP mail на хостинге, неправильном адресе отправителя, отсутствии SMTP, ошибках SPF/DKIM/DMARC, конфликте плагина формы, блокировке портов или попадании писем в спам. Надёжное решение — проверить wp_mail(), включить лог ошибок, настроить SMTP с авторизацией, указать правильный From Email и проверить DNS-записи домена.

Причина

WordPress сам по себе не является полноценным почтовым сервером. Для отправки уведомлений он использует функцию wp_mail(), а дальше письмо передаётся через PHP mail, PHPMailer, SMTP-плагин или внешний почтовый сервис.

Проблема в том, что PHP mail на обычном хостинге часто настроен слабо: письма могут не уходить, попадать в спам, отклоняться почтовыми сервисами или отправляться от технического адреса сервера. Поэтому ситуация “форма на сайте отправлена, но письмо не пришло” — очень частая для WordPress.

Важно разделять две разные проблемы:

  • письмо не отправляется — WordPress или сервер не смогли передать письмо;
  • письмо отправилось, но не дошло — письмо принято к отправке, но попало в спам, отклонено получателем или не прошло проверку домена.

Функция wp_mail() может вернуть успешный результат, но это ещё не гарантирует, что пользователь реально получил письмо. Поэтому диагностику нужно делать не только в WordPress, но и на уровне SMTP, DNS, почтового ящика и логов.

Частые причины

  • на хостинге отключена или ограничена PHP mail;
  • WordPress отправляет письма без SMTP-авторизации;
  • адрес отправителя не совпадает с доменом сайта;
  • нет SPF-записи для домена;
  • не настроен DKIM;
  • нет DMARC или он настроен слишком строго;
  • почтовый ящик сайта не создан на домене;
  • письма попадают в спам;
  • плагин формы не настроен или конфликтует с темой;
  • SMTP-порт заблокирован хостингом;
  • неверный логин, пароль, host, port или encryption в SMTP;
  • сайт отправляет слишком много писем и попадает под лимиты;
  • WooCommerce не отправляет заказы из-за статусов, шаблонов или 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

Что проверить первым

  • работает ли форма на сайте визуально;
  • показывает ли форма сообщение “отправлено”;
  • приходит ли письмо на другой ящик, например Gmail или доменную почту;
  • попадает ли письмо в спам;
  • есть ли SMTP-плагин и его лог отправки;
  • какой From Email указан в WordPress, форме и WooCommerce;
  • создан ли почтовый ящик на домене;
  • настроены ли SPF, DKIM и DMARC;
  • не меняли ли недавно хостинг, домен, DNS или почту;
  • не было ли взлома сайта или массовой рассылки.

Если письма перестали отправляться после переноса сайта, проверьте не только WordPress, но и доменные DNS-записи. Подробно этапы переноса описаны в статье Перенос сайта WordPress на другой хостинг без потери данных.

Решение

Самое надёжное решение — не пытаться заставить PHP mail работать на хостинге, а настроить отправку через SMTP или API почтового сервиса. Тогда письма будут уходить с авторизацией от реального домена, а не от случайного технического сервера.

1. Проверьте обычную отправку wp_mail()

Сначала нужно понять, срабатывает ли сама функция отправки WordPress. Это можно проверить через SMTP-плагин, тестовую отправку или временный код.

Если тест wp_mail() не проходит, проблема может быть в PHP mail, хостинге, PHPMailer, блокировке отправки или конфликте плагинов.

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

Для большинства сайтов лучше использовать SMTP-плагин. Он заменяет стандартную отправку WordPress на отправку через почтовый сервер с авторизацией.

В настройках SMTP обычно нужны:

  • SMTP Host;
  • SMTP Port;
  • Encryption: SSL или TLS;
  • SMTP Username;
  • SMTP Password или app password;
  • From Email;
  • From Name;
  • Return Path, если поддерживается.

Для Gmail, Google Workspace, Microsoft 365 и некоторых других сервисов обычный пароль от ящика часто не подходит. Может понадобиться пароль приложения, OAuth или отдельная интеграция через API.

3. Укажите правильный From Email

Отправитель должен быть на том же домене, что и сайт. Например, если сайт находится на example.com, лучше использовать адрес:

noreply@example.com
info@example.com
support@example.com

Плохой вариант — отправлять с адреса Gmail, Yahoo или чужого домена через сервер сайта. Такие письма часто попадают в спам или отклоняются.

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

Даже если SMTP работает, письма могут не доходить без правильной проверки домена.

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

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

5. Проверьте форму обратной связи

Если тестовое SMTP-письмо приходит, а письма с формы нет, проблема почти точно в форме.

Проверьте:

  • поле получателя To;
  • поле From;
  • Reply-To;
  • обязательные поля формы;
  • ошибки в шаблоне письма;
  • антиспам-защиту;
  • конфликт с кешем;
  • AJAX-отправку формы;
  • лог плагина формы.

6. Проверьте WooCommerce

WooCommerce отправляет письма не только через SMTP, но и по своим условиям: статус заказа, шаблон письма, включение уведомления, email получателя.

Проверьте:

  • WooCommerce → Настройки → Emails;
  • включены ли нужные уведомления;
  • какой email администратора указан;
  • не переопределены ли email-шаблоны в теме;
  • создаётся ли заказ;
  • меняется ли статус заказа;
  • нет ли ошибок в логах WooCommerce;
  • не блокирует ли SMTP письма с вложениями.

Если сайт на WooCommerce работает медленно или письма зависают при оформлении заказа, проверьте также техническую оптимизацию магазина в статье Как ускорить WooCommerce: практическое руководство для магазина WordPress.

7. Проверьте лимиты хостинга

Даже при правильной настройке хостинг может ограничивать отправку писем. Это часто бывает на дешёвых тарифах или после подозрения на спам.

Уточните:

  • сколько писем можно отправлять в час;
  • разрешена ли PHP mail;
  • открыты ли SMTP-порты 25, 465, 587;
  • не заблокирована ли отправка из-за жалоб;
  • есть ли серверный mail log;
  • не попал ли IP хостинга в blacklist.

Код

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

Проверить wp_mail() через временный 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

Логировать ошибки 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));
    }
});

Принудительно указать HTML-тип письма

Куда вставлять: functions.php дочерней темы или отдельный плагин. Используйте только если ваши письма действительно должны быть HTML.

add_filter('wp_mail_content_type', function () {
    return 'text/html';
});

Важно: если включить HTML-тип глобально, это может повлиять на письма разных плагинов. Лучше использовать такой фильтр точечно внутри конкретной отправки.

Настроить 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');
});

Проверить cron-задачи WordPress через WP-CLI

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

wp cron event list

Проверить активные плагины

Если письма перестали отправляться после обновления, проверьте активные плагины.

wp plugin list --status=active

Результат

После правильной настройки WordPress должен стабильно отправлять письма с форм, уведомления администратора, письма WooCommerce, сброс пароля, регистрацию пользователей и системные уведомления.

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

  • тестовое письмо SMTP приходит во входящие;
  • письма с форм приходят на правильный адрес;
  • Reply-To ведёт на email клиента, а не ломает отправителя;
  • WooCommerce отправляет письма по нужным статусам заказа;
  • SPF, DKIM и DMARC проходят проверку;
  • письма не попадают массово в спам;
  • в логах нет SMTP authentication failed;
  • From Email совпадает с доменом сайта;
  • после переноса сайта отправка продолжает работать.

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

Если письма попадают в спам

Проверьте заголовки письма. В них обычно видно, прошли ли SPF, DKIM и DMARC. Если хотя бы одна из проверок не проходит, почтовые сервисы могут понижать доверие к письму.

Также проверьте:

  • нет ли в письме слишком агрессивных рекламных фраз;
  • не отправляется ли письмо от чужого домена;
  • есть ли нормальная тема письма;
  • нет ли битых ссылок;
  • не прикреплены ли подозрительные файлы;
  • не находится ли IP или домен в blacklist.

Если не приходят письма сброса пароля

Письмо сброса пароля отправляется через wp_mail(). Если оно не приходит, проверьте SMTP, From Email, спам, логи отправки и корректность email пользователя.

Если из-за этого нельзя войти в админку, используйте инструкцию Не работает админка WordPress: причины и способы восстановления доступа.

Если письма не отправляются после обновления

Проверьте, какие плагины обновлялись. Часто проблема появляется после обновления плагина формы, SMTP-плагина, WooCommerce, темы или security-плагина.

Действуйте аккуратно:

  • включите лог SMTP;
  • проверьте wp_mail_failed;
  • временно отключите конфликтующий плагин;
  • проверьте тестовую отправку;
  • проверьте форму и WooCommerce отдельно.

Если SMTP-тест работает, но письма с формы не приходят

Это значит, что транспорт отправки работает, а ошибка находится в конкретной форме или её настройках.

Проверьте:

  • правильный ли email получателя;
  • не подставляется ли email посетителя в From;
  • правильно ли настроен Reply-To;
  • нет ли пустых обязательных полей;
  • не отключены ли уведомления формы;
  • не блокирует ли антиспам отправку;
  • нет ли JS-ошибок при AJAX-отправке.

Если письма перестали отправляться после взлома

После взлома хостинг может ограничить отправку писем, а домен или IP могут попасть в спам-базы. Сначала нужно очистить сайт, сменить пароли, проверить неизвестных администраторов и остановить спам-рассылку.

Для полной проверки используйте инструкцию Как удалить вирус с сайта WordPress.

Если отправка работает только на часть адресов

Иногда письма доходят на Gmail, но не доходят на корпоративную почту, или наоборот. Это обычно связано с политиками принимающего сервера, SPF/DKIM/DMARC, blacklist, вложениями или строгой фильтрацией.

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

Использовать email посетителя в поле From

Так делать нельзя. Если пользователь ввёл Gmail-адрес, а сайт отправляет письмо как будто от этого Gmail, письмо почти наверняка вызовет проблемы с проверкой отправителя. Email посетителя лучше ставить в Reply-To.

Настроить SMTP, но забыть SPF

Если вы подключили внешний SMTP-сервис, но не добавили его в SPF домена, часть писем может попадать в спам или отклоняться.

Считать “форма отправлена” доказательством доставки

Сообщение формы означает только, что форма обработала запрос. Оно не гарантирует, что письмо дошло до получателя.

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

Иногда письма отправляются, но лежат в папке “Спам”, “Промоакции”, “Уведомления” или блокируются корпоративным фильтром.

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

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

Оставить старую почту после переноса домена

После переноса сайта или DNS старые MX, SPF и DKIM могут перестать соответствовать текущей почте. Из-за этого письма перестают доходить или попадают в спам.

Не вести лог отправки

Без лога сложно понять, письмо не отправилось или просто не дошло. Для бизнес-сайта, интернет-магазина и заявок логирование email — почти обязательная часть диагностики.

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

Не отправляются письма с Contact Form 7

  • Проверьте вкладку Mail в форме.
  • Убедитесь, что To содержит правильный email.
  • Поставьте From Email на адрес домена сайта.
  • Email посетителя добавьте в Reply-To.
  • Проверьте SMTP-тест.
  • Проверьте ошибки валидации формы.
  • Отключите кеш для страницы с формой, если форма отправляется через AJAX.

Не отправляются письма WooCommerce

  • Проверьте WooCommerce → Настройки → Emails.
  • Убедитесь, что нужные уведомления включены.
  • Проверьте статус заказа.
  • Проверьте email администратора.
  • Проверьте SMTP-лог.
  • Проверьте шаблоны email в теме.
  • Проверьте, не блокирует ли хостинг отправку.

Письма уходят, но не доходят

  • Проверьте папку спам.
  • Проверьте SPF, DKIM и DMARC.
  • Проверьте заголовки письма.
  • Проверьте blacklist домена и IP.
  • Проверьте From Email.
  • Отправьте тест на другой почтовый сервис.

SMTP показывает authentication failed

  • Проверьте логин и пароль.
  • Проверьте SMTP Host.
  • Проверьте Port и Encryption.
  • Проверьте, нужен ли app password.
  • Проверьте, включён ли доступ SMTP у почтового сервиса.
  • Проверьте, не заблокирован ли порт хостингом.

Письма не отправляются после переноса сайта

  • Проверьте MX-записи домена.
  • Проверьте SPF.
  • Проверьте DKIM.
  • Проверьте DMARC.
  • Проверьте SMTP Host и порт.
  • Проверьте, не остались ли старые настройки в SMTP-плагине.
  • Проверьте почтовый ящик на новом хостинге или во внешнем сервисе.

Письма не отправляются после взлома

  • Проверьте, не рассылал ли сайт спам.
  • Проверьте логи отправки.
  • Смените пароли администраторов.
  • Проверьте неизвестных пользователей.
  • Очистите сайт от вирусов.
  • Обратитесь к хостингу для снятия блокировки отправки.

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

Почему не отправляются письма WordPress?

Чаще всего причина в PHP mail на хостинге, отсутствии SMTP, неправильном From Email, ошибках SPF/DKIM/DMARC, конфликте плагина формы или блокировке отправки на сервере.

Как исправить отправку писем WordPress?

Настройте SMTP с авторизацией, укажите отправителя на домене сайта, проверьте SPF, DKIM и DMARC, включите лог отправки и протестируйте wp_mail(), форму и WooCommerce отдельно.

Почему SMTP-тест работает, а письма с формы не приходят?

Значит, отправка на уровне SMTP работает, а проблема в настройках формы: To, From, Reply-To, шаблон письма, антиспам, AJAX или конфликт плагинов.

Почему письма WordPress попадают в спам?

Чаще всего из-за неправильного From Email, отсутствия SPF/DKIM/DMARC, плохой репутации домена или IP, подозрительного текста письма, вложений или несоответствия отправителя домену.

FAQ

Почему WordPress не отправляет письма по умолчанию?

WordPress использует wp_mail(), но доставка зависит от настроек сервера, PHP mail, PHPMailer, DNS домена и почтовых фильтров. На многих хостингах стандартная отправка работает нестабильно.

Нужно ли обязательно ставить SMTP-плагин?

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

Какой email указывать в From?

Лучше указывать адрес на домене сайта, например info@example.com или noreply@example.com. Email посетителя формы ставьте в Reply-To, а не в From.

Почему письма WooCommerce не приходят администратору?

Проверьте включение email-уведомления, статус заказа, email получателя, SMTP-лог, From Email, шаблоны email в теме и ошибки WooCommerce.

Почему письмо сброса пароля WordPress не приходит?

Письмо сброса пароля отправляется через wp_mail(). Если оно не приходит, проверьте SMTP, спам, правильность email пользователя, From Email и логи отправки.

Что делать, если хостинг блокирует SMTP?

Уточните у хостинга доступные порты и ограничения. Если порты SMTP закрыты, используйте почтовый сервис с API-интеграцией или попросите хостинг открыть нужный порт.

Можно ли настроить отправку без плагина?

Да, через phpmailer_init в коде. Но для обычного сайта удобнее использовать SMTP-плагин, потому что он даёт настройки, тестовую отправку, логирование и меньше риска ошибиться с паролем.

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

Проверьте последние обновления, настройки SMTP, DNS-записи, лимиты хостинга, спам, blacklist, изменения домена, перенос сайта и логи отправки.

Нужна помощь?

Если письма WordPress не отправляются, заявки с форм теряются или WooCommerce не присылает уведомления о заказах, лучше сначала провести техническую диагностику, а не менять настройки наугад.

Вывод

Если не отправляются письма WordPress, не ограничивайтесь проверкой одной формы. Нужно проверить всю цепочку: wp_mail(), SMTP, From Email, DNS-записи SPF/DKIM/DMARC, хостинг, форму, WooCommerce, спам и логи. Самый стабильный вариант для рабочего сайта — отправка через SMTP или почтовый API с правильной авторизацией домена.

Об авторе

vkuzyomko administrator