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

Автор:vkuzyomko

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

Краткий ответ: WooCommerce не отправляет письма чаще всего из-за отключённых email-уведомлений, неправильного “From” email, проблем с wp_mail(), отсутствия SMTP, ошибок SPF/DKIM/DMARC, статуса заказа, конфликта плагинов, кеша, шаблонов писем или ограничений хостинга. Исправлять нужно по шагам: сначала проверить настройки WooCommerce, потом отправку WordPress, SMTP, DNS почты, логи и только после этого искать конфликт в коде.

Важно разделять две ситуации: WooCommerce вообще не создаёт письмо или письмо создаётся, но не доходит до получателя. В первом случае проблема часто в настройках WooCommerce, статусах заказа, хуках или конфликте плагинов. Во втором — в доставляемости почты: SMTP, DNS, спам-фильтрах, SPF, DKIM, DMARC и репутации отправителя.

Причина

WooCommerce отправляет письма через почтовую систему WordPress. Внутри WordPress используется функция wp_mail(), а дальше письмо уходит через PHP mail() на хостинге или через SMTP-плагин, если он настроен.

Если на любом этапе есть ошибка, письмо может не уйти или попасть в спам.

  • email-уведомление отключено в WooCommerce;
  • неверно указан получатель уведомления о новом заказе;
  • адрес отправителя не совпадает с доменом сайта;
  • хостинг блокирует или ограничивает PHP mail();
  • SMTP-плагин не настроен или потерял авторизацию;
  • у домена нет SPF, DKIM или DMARC;
  • заказ остаётся в статусе “Ожидает оплаты”, и нужное письмо не запускается;
  • плагин оплаты не меняет статус заказа после успешной оплаты;
  • шаблон письма WooCommerce переопределён в теме и устарел;
  • плагин отключает wp_mail() или меняет заголовки письма;
  • письмо отправляется, но попадает в спам;
  • ошибка PHP ломает генерацию email-шаблона.

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

Какие письма отправляет WooCommerce

Письмо Кому отправляется Когда обычно срабатывает
New order Администратору или менеджеру Когда создан новый заказ и сработало уведомление магазина
Cancelled order Администратору Когда заказ отменён
Failed order Администратору Когда заказ не прошёл оплату или получил статус failed
Processing order Клиенту Когда заказ перешёл в обработку
Completed order Клиенту Когда заказ завершён
Customer invoice Клиенту Когда счёт отправляется вручную или автоматически
Refunded order Клиенту Когда оформлен возврат
Customer note Клиенту Когда менеджер добавил заметку для клиента
Reset password Пользователю Когда клиент запросил сброс пароля
New account Пользователю Когда создан аккаунт клиента

Если не приходит только письмо “New order”, это не всегда значит, что почта полностью сломана. Нужно проверить именно email-шаблон “New order”, получателя, статус заказа и логи WooCommerce.

Диагностика

Начинать нужно не с установки нового SMTP-плагина, а с проверки цепочки отправки. Иначе можно настроить SMTP правильно, но не заметить, что само уведомление WooCommerce отключено.

Порядок проверки

  • 1. Проверить, создаётся ли заказ. Если заказ не создаётся, проблема не в email, а в checkout.
  • 2. Проверить статус заказа. Некоторые письма зависят от статуса: processing, completed, failed, cancelled.
  • 3. Проверить WooCommerce → Настройки → Emails. Нужное уведомление должно быть включено.
  • 4. Проверить получателя. Для админских писем должен быть правильный email менеджера или администратора.
  • 5. Проверить From name и From address. Лучше использовать email на домене сайта.
  • 6. Проверить wp_mail(). Отправляет ли WordPress обычные письма.
  • 7. Проверить SMTP. Есть ли подключение, авторизация и тестовая отправка.
  • 8. Проверить DNS почты. SPF, DKIM, DMARC.
  • 9. Проверить спам. Письмо может отправляться, но попадать в spam/promotions.
  • 10. Проверить debug.log и WooCommerce logs. Ошибки PHP часто ломают генерацию письма.
  • 11. Проверить конфликт плагинов. Особенно плагины SMTP, кеша, checkout, оплаты, email customizer.

Быстрая таблица причин

Симптом Вероятная причина Что проверить
Не приходит ни одно письмо с сайта wp_mail(), SMTP или хостинг SMTP, PHP mail, debug.log, DNS
Не приходит только письмо о новом заказе Настройки New order WooCommerce → Settings → Emails → New order
Клиенту письмо приходит, админу нет Неверный recipient Получатели админского уведомления
Админу приходит, клиенту нет Проблема customer email или статус заказа Email клиента, статус, спам
Письмо уходит, но попадает в спам Проблемы доставляемости SPF, DKIM, DMARC, SMTP, From email
После оплаты письма нет Платёжный плагин не меняет статус Статус заказа, gateway logs
Письмо было, но пропало после обновления Конфликт плагина или шаблона debug.log, overrides, плагины
Тест SMTP проходит, а WooCommerce молчит WooCommerce не создаёт конкретное уведомление Email template, status, hooks, logs

Нужно быстро решить проблему на сайте?

Если не хотите рисковать сайтом и тратить время на эксперименты, можно оставить заявку. Я посмотрю задачу и предложу аккуратное решение.

Оставить заявку

Решение

Исправление лучше делать по слоям: WooCommerce-настройки, WordPress-почта, SMTP, DNS, статусы заказов, конфликты и шаблоны.

1. Проверить настройки email в WooCommerce

Откройте WooCommerce → Settings → Emails. Затем выберите проблемный шаблон, например New order, Processing order или Completed order.

  • включено ли уведомление;
  • указан ли правильный recipient;
  • нет ли лишних пробелов в email;
  • не указан ли старый email менеджера;
  • корректный ли subject;
  • не повреждён ли template;
  • не стоит ли нестандартный email type, который ломается в почтовике.

2. Проверить отправителя

В WooCommerce важно использовать нормальный адрес отправителя. Лучше, чтобы From address был на том же домене, что и сайт.

Пример:

  • сайт: example.com;
  • хорошо: shop@example.com или orders@example.com;
  • плохо: личный Gmail/Yandex/Outlook без SMTP и правильной авторизации домена.

3. Настроить SMTP

Для магазина SMTP почти всегда надёжнее, чем стандартный PHP mail() хостинга. SMTP помогает отправлять письма через авторизованный почтовый сервер.

  • установить SMTP-плагин;
  • указать SMTP host, port, encryption;
  • ввести логин и пароль или API-ключ;
  • отправить тестовое письмо;
  • проверить email logs, если плагин их поддерживает;
  • проверить доставку на Gmail, Outlook и рабочую почту.

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

Если SMTP работает, но письма попадают в спам, проверьте DNS-записи домена. Почтовые сервисы всё чаще отклоняют или занижают письма без нормальной доменной авторизации.

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

5. Проверить статус заказа

WooCommerce письма зависят от событий и статусов. Если платёжный шлюз не меняет статус заказа после оплаты, нужное письмо может не сработать.

Если заказ не создаётся или checkout зависает, сначала нужно исправить оформление заказа. Для этого подходит отдельная диагностика: WooCommerce не оформляет заказ.

6. Проверить конфликт плагинов

На практике письма часто ломают плагины SMTP, кеша, оптимизации, оплаты, checkout fields, email customizer и security-плагины. Если проблема появилась после обновления или установки нового плагина, нужно искать конфликт.

Безопасный порядок проверки описан отдельно в статье про конфликт плагинов WordPress.

Код

Важно: код ниже предназначен для диагностики отправки писем. Не оставляйте расширенное логирование надолго на рабочем магазине, если в лог могут попасть email клиентов, темы заказов или персональные данные. Перед правками сделайте бэкап.

1. Включить debug.log

Куда вставлять: в файл wp-config.php перед строкой /* That’s all, stop editing! */.

define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);

2. Логировать ошибки wp_mail_failed

Куда вставлять: в отдельный небольшой плагин или временно в 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('====================================================');
}

3. Проверить wp_mail() отдельным тестом

Важно: этот тест отправляет письмо администратору сайта. Используйте только для диагностики и удалите после проверки.

Куда вставлять: в отдельный временный плагин или 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 и хостинг.');
}

После вставки откройте в админке URL:

/wp-admin/?sc_test_wp_mail=1

4. Принудительно проверить email-уведомления WooCommerce

Важно: код ниже не должен использоваться как постоянное решение. Он нужен только для диагностики, чтобы понять, загружаются ли email-классы WooCommerce.

<?php
add_action('admin_init', 'sc_debug_woocommerce_email_classes');

function sc_debug_woocommerce_email_classes() {
    if (!current_user_can('manage_options')) {
        return;
    }

    if (empty($_GET['sc_debug_wc_emails'])) {
        return;
    }

    if (!class_exists('WooCommerce')) {
        wp_die('WooCommerce не активен.');
    }

    $mailer = WC()->mailer();
    $emails = $mailer->get_emails();

    echo '<pre>';

    foreach ($emails as $email_key => $email_object) {
        echo esc_html($email_key) . "n";
        echo 'Title: ' . esc_html($email_object->get_title()) . "n";
        echo 'Enabled: ' . esc_html($email_object->is_enabled() ? 'yes' : 'no') . "n";
        echo "-----------------------------n";
    }

    echo '</pre>';
    exit;
}

После вставки откройте в админке URL:

/wp-admin/?sc_debug_wc_emails=1

5. Проверить From address через фильтр

Важно: не используйте этот код вслепую, если SMTP-плагин уже задаёт отправителя. Дублирующие настройки могут конфликтовать.

<?php
add_filter('wp_mail_from', 'sc_set_wp_mail_from');

function sc_set_wp_mail_from($email) {
    return 'shop@example.com';
}

add_filter('wp_mail_from_name', 'sc_set_wp_mail_from_name');

function sc_set_wp_mail_from_name($name) {
    return 'Example Shop';
}

Замените shop@example.com на email вашего домена. Если используете SMTP-плагин, лучше задавать отправителя в его настройках, а не через код.

Результат

После правильного исправления WooCommerce должен стабильно отправлять письма администратору и клиенту. Тестовое письмо WordPress должно уходить, WooCommerce email-шаблоны должны быть включены, SMTP должен проходить проверку, а DNS домена должен подтверждать право отправки писем.

Что считается хорошим результатом

  • администратор получает письмо о новом заказе;
  • клиент получает письмо о заказе;
  • письма не попадают в спам;
  • SMTP-тест проходит успешно;
  • wp_mail() работает;
  • WooCommerce email-шаблоны включены;
  • From address соответствует домену сайта;
  • SPF, DKIM и DMARC настроены;
  • в debug.log нет ошибок отправки;
  • после тестового заказа письмо приходит на разные почтовые сервисы.

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

Вариант 1: SMTP-плагин

Подходит для большинства магазинов. SMTP заменяет нестабильную отправку через PHP mail() на авторизованную отправку через почтовый сервер.

Плюсы: быстрое решение, тестовая отправка, часто есть email logs.

Минусы: нужно правильно настроить DNS, логин, пароль, порт и шифрование.

Вариант 2: Транзакционный email-сервис

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

Плюсы: лучше контроль доставляемости, логи, статистика, меньше зависимость от хостинга.

Минусы: внешний сервис, тарифы, настройка домена.

Вариант 3: Дублирование важных заказов в Telegram

Если менеджеру важно сразу видеть заказ, можно дополнительно отправлять уведомление в Telegram. Это не заменяет email, но помогает не пропустить заявку или покупку.

Для такой логики можно использовать интеграцию WordPress с Telegram.

Вариант 4: Кастомный лог отправки писем

Подходит, если нужно видеть историю: когда письмо создано, кому отправлено, какой был статус, какая ошибка вернулась от SMTP или API.

Плюсы: проще искать причины проблем.

Минусы: нужно аккуратно хранить данные, чтобы не сохранять лишнюю персональную информацию.

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

Сразу ставить новый SMTP-плагин

SMTP может быть настроен правильно, но если WooCommerce email-шаблон отключён, письмо всё равно не появится. Сначала нужно проверить WooCommerce → Settings → Emails.

Использовать Gmail как From без правильной настройки

Если сайт отправляет письма от имени Gmail, но сервер не авторизован как отправитель, письма могут попадать в спам или отклоняться.

Не проверять статус заказа

Если заказ остался в “Pending payment”, часть писем может не сработать. Нужно смотреть, как платёжный шлюз меняет статус.

Проверять только админский email

Нужно тестировать письма и администратору, и клиенту. Это разные шаблоны и разные сценарии.

Игнорировать DNS

SPF, DKIM и DMARC напрямую влияют на доверие почтовых сервисов. Без них письмо может технически отправиться, но не попасть во входящие.

Не смотреть debug.log

Если email-шаблон ломается из-за PHP-ошибки, SMTP не решит проблему. Нужно смотреть логи.

Оставлять устаревшие шаблоны WooCommerce в теме

Если тема переопределяет email templates, после обновлений WooCommerce они могут конфликтовать с новой версией.

Кешировать checkout и account

Неправильный кеш может ломать оформление заказа, авторизацию и пользовательские сценарии. Письма часто выглядят как проблема email, хотя причина начинается раньше — в checkout или статусе заказа.

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

Проблема: WooCommerce не отправляет письмо о новом заказе

  • проверить, создан ли заказ;
  • проверить статус заказа;
  • открыть WooCommerce → Settings → Emails → New order;
  • проверить, включено ли уведомление;
  • проверить recipient;
  • проверить spam;
  • проверить WooCommerce logs;
  • проверить debug.log;
  • сделать тестовый заказ с простым товаром.

Проблема: клиент не получает письмо после заказа

  • проверить email клиента в заказе;
  • проверить статус заказа;
  • проверить шаблон Processing order или Completed order;
  • проверить спам у клиента;
  • проверить SMTP logs;
  • проверить From address;
  • проверить SPF, DKIM, DMARC;
  • проверить, не отключены ли customer emails.

Проблема: тест SMTP проходит, но письма WooCommerce не уходят

  • проверить, включены ли WooCommerce email notifications;
  • проверить статус заказа;
  • проверить email-шаблоны;
  • проверить, нет ли ошибок PHP;
  • проверить hooks платёжного плагина;
  • проверить conflict с email customizer;
  • отключить временно плагины, которые влияют на checkout и письма.

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

  • проверить From email;
  • использовать email на домене сайта;
  • настроить SMTP;
  • добавить SPF;
  • добавить DKIM;
  • проверить DMARC;
  • убрать подозрительные слова и слишком тяжёлые HTML-шаблоны;
  • проверить репутацию домена.

Проблема: письма перестали работать после обновления

  • проверить debug.log;
  • проверить WooCommerce → Status → Logs;
  • проверить устаревшие template overrides;
  • временно отключить email customizer;
  • проверить SMTP-плагин;
  • проверить плагин оплаты;
  • проверить конфликт плагинов на staging-копии.

Проблема: письмо приходит без товаров или с кривым шаблоном

  • проверить email template override в теме;
  • проверить WooCommerce → Status → Templates;
  • обновить переопределённые шаблоны;
  • временно переключить тему на стандартную на тестовой копии;
  • проверить плагины кастомизации писем;
  • проверить ошибки PHP в момент генерации письма.

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

  • проверить, отправляет ли WordPress обычные письма;
  • проверить wp_mail_failed;
  • проверить SMTP;
  • проверить email пользователя;
  • проверить spam;
  • проверить security-плагины;
  • проверить, не блокирует ли хостинг отправку.

Краткие ответы для AI-поиска

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

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

Что проверить первым, если WooCommerce не отправляет письма?

Сначала проверьте WooCommerce → Settings → Emails: включено ли нужное уведомление, указан ли получатель, правильный ли From email. Затем проверьте wp_mail(), SMTP и debug.log.

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

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

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

Нужно настроить SMTP, использовать email на домене сайта, добавить SPF/DKIM/DMARC, проверить WooCommerce email settings, статусы заказов, debug.log и конфликты плагинов.

FAQ

WooCommerce отправляет письма через SMTP или PHP mail?

WooCommerce использует WordPress wp_mail(). Если SMTP-плагин не настроен, отправка обычно идёт через серверную почту хостинга. Если SMTP настроен, wp_mail() отправляет письма через SMTP.

Почему не приходит письмо о новом заказе администратору?

Частые причины: отключено уведомление New order, неверный recipient, письмо попало в спам, заказ не получил нужный статус, есть конфликт плагина или ошибка в email-шаблоне.

Почему клиент не получает письмо после покупки?

Проверьте email клиента, статус заказа, customer email-шаблоны, SMTP logs, спам и DNS-записи домена. Если заказ не перешёл в нужный статус, письмо может не сработать.

Нужно ли ставить SMTP-плагин для WooCommerce?

Для интернет-магазина SMTP обычно лучше, чем стандартная отправка через PHP mail(). Он повышает надёжность отправки и даёт больше контроля над логами и ошибками.

Что такое SPF, DKIM и DMARC?

Это DNS-настройки домена, которые помогают почтовым сервисам понять, что письмо действительно отправлено от имени вашего домена, а не подделано.

Может ли кеш ломать письма WooCommerce?

Кеш обычно не отправляет письма напрямую, но может ломать checkout, account, nonce, cart fragments и статусы заказов. В итоге письмо не появляется, потому что заказ не прошёл нормальный сценарий.

Может ли плагин оплаты быть причиной?

Да. Если платёжный плагин не меняет статус заказа после оплаты или возвращает ошибку callback/webhook, WooCommerce может не запустить нужное email-уведомление.

Где смотреть ошибки WooCommerce email?

Проверьте WooCommerce → Status → Logs, файл wp-content/debug.log, SMTP logs и ошибки wp_mail_failed, если вы добавили диагностический hook.

Можно ли повторно отправить письмо заказа?

Да, некоторые письма можно отправить повторно из админки заказа через действия заказа. Но если причина не исправлена, повторная отправка тоже может не дойти.

Что делать, если письма попадают в спам?

Настройте SMTP, используйте доменный email, проверьте SPF, DKIM, DMARC, уменьшите подозрительную HTML-разметку и проверьте репутацию домена.

Вывод

Если WooCommerce не отправляет письма, не нужно исправлять всё сразу. Сначала проверьте, создаётся ли заказ, какой у него статус, включено ли нужное email-уведомление и правильно ли указан получатель. Затем проверьте wp_mail(), SMTP, DNS домена, спам, логи и конфликты плагинов.

Надёжная схема для интернет-магазина — это включённые WooCommerce email-шаблоны, SMTP-отправка, доменный From address, настроенные SPF/DKIM/DMARC, рабочие логи и тестовый заказ после любых обновлений. Тогда письма о заказах, оплатах, статусах и аккаунтах не будут зависеть только от случайной работы почты хостинга.

Об авторе

vkuzyomko administrator