WooCommerce не приходят письма о заказе после перехода на SMTP: диагностика и решение

Сценарий типичный: сайт уже отправлял письма через стандартный wp_mail(), вы подключили SMTP-плагин, тестовое письмо вроде бы уходит, а уведомления о новом заказе, смене статуса или восстановлении пароля внезапно перестают доходить. Проблема почти всегда не в WooCommerce как таковом, а в связке wp_mail(), SMTP-плагина, настроек домена и шаблонов уведомлений.

Что обычно ломается после перехода на SMTP

После подключения SMTP WordPress начинает отправлять письма через внешний сервер, а не через локальную функцию хостинга. Это полезно, но добавляет новые точки отказа. Чаще всего ломается одно из трёх:

  • неверный From Email или From Name;
  • SMTP-сервер не принимает авторизацию или режет отправку по лимитам;
  • WooCommerce использует шаблон письма, который отключён в настройках уведомлений.

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

Диагностика: где именно пропадает письмо

1. Проверьте, отправляет ли WordPress любое письмо

Сначала нужно отделить проблему WooCommerce от проблемы почтовой доставки. Самый простой тест — отправить письмо через wp_mail() вручную. Добавьте временно такой код в мини-плагин или в functions.php дочерней темы:

add_action('init', function () {
    if (!is_user_logged_in() || !current_user_can('manage_options')) {
        return;
    }

    if (isset($_GET['test_wp_mail'])) {
        $to      = get_option('admin_email');
        $subject = 'Тест отправки WordPress';
        $message = 'Если это письмо пришло, базовая отправка работает.';
        $headers = array('Content-Type: text/plain; charset=UTF-8');

        $result = wp_mail($to, $subject, $message, $headers);
        wp_die($result ? 'wp_mail() отправил письмо' : 'wp_mail() не смог отправить письмо');
    }
});

Откройте страницу сайта с параметром ?test_wp_mail=1 под администратором. Если письмо не приходит, проблема не в WooCommerce.

2. Сверьте настройки WooCommerce

Перейдите в WooCommerce → Настройки → Письма и проверьте:

  • включено ли уведомление Новый заказ;
  • указан ли правильный адрес получателя;
  • не переопределён ли шаблон письма в теме;
  • не отключено ли письмо плагином для фильтрации уведомлений.

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

3. Посмотрите логи SMTP-плагина

Большинство SMTP-плагинов умеют писать журнал отправки. Это важнее, чем просто кнопка «Send Test Email». В логе ищите:

  • ошибки авторизации;
  • ответы сервера 4xx/5xx;
  • отклонение письма из-за From или Return-Path;
  • лимиты отправки за минуту или за день.

Если в логе письмо отмечено как отправленное, но его нет во входящих, это уже вопрос репутации домена, SPF/DKIM/DMARC и спам-фильтров.

Пошаговое решение без лишних экспериментов

Шаг 1. Зафиксируйте один адрес отправителя

Не используйте случайный адрес из настроек хостинга. Для магазина нужен стабильный адрес на вашем домене, например shop@domain.ru. Он должен совпадать с доменом, который вы реально контролируете, и быть разрешён в SMTP-сервисе.

Если SMTP-плагин позволяет задать From Email и Force From Email, включите принудительную подстановку. Иначе WooCommerce или тема могут подменять отправителя на другой адрес, и сервер начнёт отклонять письмо.

Шаг 2. Проверьте DNS-записи домена

Для нормальной доставляемости нужны SPF и DKIM, а в некоторых случаях ещё и DMARC. Без них письмо может уходить, но попадать в спам или отклоняться на стороне получателя. Проверять нужно не «на глаз», а через инструменты DNS-проверки или отчёты SMTP-сервиса.

Если используете внешний SMTP, убедитесь, что его домен или ваш домен разрешены в SPF. Если сервис выдаёт DKIM-подпись, добавьте её в DNS без сокращений и ручных правок.

Шаг 3. Не ломайте заголовки письма фильтрами темы

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

Для точечной проверки можно принудительно задать заголовки через фильтр WooCommerce:

add_filter('woocommerce_email_headers', function ($headers, $email_id, $order) {
    if ($email_id !== 'new_order') {
        return $headers;
    }

    $headers[] = 'Content-Type: text/html; charset=UTF-8';
    return $headers;
}, 10, 3);

Этот пример не чинит доставку сам по себе, но помогает исключить проблему с некорректной кодировкой или типом письма.

Шаг 4. Проверьте, не блокирует ли сервер исходящую почту

На части хостингов SMTP-плагин настроен правильно, но сам сервер ограничивает исходящие соединения. Тогда тест может проходить через внешний сервис, а боевые письма — нет. Особенно это заметно, если магазин отправляет много уведомлений подряд.

Если есть доступ к логам сервера, ищите ошибки соединения с SMTP-портом, таймауты и отказ в TLS. На shared-хостинге иногда проще перейти на SMTP-сервис с нормальной репутацией, чем пытаться лечить ограничения провайдера.

Сравнение подходов: плагин, код, хостинг

ПодходКогда подходитМинус
SMTP-плагинНужна быстрая настройка без разработкиЗависимость от стороннего сервиса и его лимитов
Код через wp_mail и фильтры WooCommerceНужно точечно проверить или изменить отправкуТребует аккуратной отладки и доступа к коду
Почта хостингаНебольшой сайт без критичных уведомленийЧасто хуже доставляемость и меньше контроля

Как проверить, что решение сработало

После правок не ограничивайтесь одной тестовой отправкой. Проверьте цепочку целиком:

  1. отправьте тест через wp_mail();
  2. создайте тестовый заказ в WooCommerce;
  3. проверьте письмо админу и письмо покупателю;
  4. посмотрите лог SMTP-плагина;
  5. сравните заголовки письма в почтовом клиенте.

Если письмо приходит в папку «Спам», откройте его заголовки и проверьте, есть ли SPF/DKIM pass. Если письмо не доходит вообще, но лог SMTP показывает успех, проблема уже не в WordPress, а в доставляемости домена или политике почтового сервиса получателя.

Частые ошибки и как их исправить

Письмо отправляется, но не приходит админу

Обычно это неправильный адрес получателя в настройках WooCommerce или фильтр на стороне почтового сервиса. Проверьте, не стоит ли в поле уведомления старый адрес, и не блокирует ли корпоративная почта внешние домены.

Тестовое письмо приходит, а WooCommerce — нет

Значит, SMTP работает, а проблема в шаблоне или событии WooCommerce. Проверьте, включено ли нужное письмо, не переопределён ли шаблон в теме и не отключает ли его код в functions.php.

После смены SMTP письма стали попадать в спам

Чаще всего виноваты несоответствие From Email и домена отправки, отсутствие DKIM или слишком «чужой» SMTP-сервис без прогрева домена. Исправляйте сначала DNS, потом заголовки, а не наоборот.

Письма перестали уходить после обновления плагина

Проверьте журнал ошибок PHP и лог SMTP. Иногда обновление меняет способ авторизации, формат пароля приложения или совместимость с TLS. Если плагин начал падать после обновления, откатите его только после сохранения логов.

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

Не храните SMTP-пароль в открытом виде в репозитории. Если конфигурация вынесена в wp-config.php, ограничьте доступ к файлу и не коммитьте его в публичный Git. Для сервисов с поддержкой паролей приложений используйте именно их, а не основной пароль почты.

Если магазин отправляет много уведомлений, не запускайте массовую отправку на каждом запросе страницы. Для фоновой отправки используйте штатный WP-Cron только для небольших объёмов; при высокой нагрузке лучше вынести рассылку в очередь или внешний сервис. Иначе вы получите задержки на checkout и нестабильную отправку.

Когда нужно быстро убрать лишние источники проблем в админке и на фронтенде, полезно проверить, не мешают ли почтовой логике лишние оптимизации, дубли и старые настройки темы. В таких случаях помогает аккуратная чистка конфигурации и отключение лишнего функционала, но без удаления рабочих уведомлений и без «магических» правок в ядре.

WooCommerce: как автоматически удалять неоплаченные заказы через Cron
01.08.2026
WooCommerce не работает отправка писем после покупки: что делать
20.04.2026
Как создать автоматическое удаление старого контента в WordPress
23.12.2025
Удалить кэш в WordPress: практические способы и код для очистки
10.11.2025
Как избежать конфликтов плагинов в WordPress: практические решения и примеры кода
09.12.2025