WooCommerce: как исправить проблемы с отправкой писем при изменении статуса заказа

Диагностика проблемы с отправкой писем в WooCommerce

Проблема с неотправкой или неправильной отправкой писем при смене статуса заказа — частый кейс в WooCommerce. Это проявляется так: покупатель не получает уведомление о статусе, администратор не получает письма о новых заказах или обновлениях. Для начала нужно понять, на каком этапе возникает сбой:

  • Письма не уходят вообще;
  • Письма уходят, но содержимое некорректно;
  • Письма уходят с задержкой или попадают в спам;
  • Некорректно работает шаблон письма.

Для проверки используйте лог ошибок сервера и плагин WP Mail Logging (https://ru.wordpress.org/plugins/wp-mail-logging/), который записывает все попытки отправки писем и результаты.

Основные причины проблем с отправкой писем

  • Неправильная конфигурация SMTP или отсутствие SMTP;
  • Конфликты с другими плагинами, которые модифицируют почтовые функции;
  • Ошибки в коде, который изменяет стандартное поведение отправки писем;
  • Проблемы с шаблонами WooCommerce для писем;
  • Ограничения хостинга на отправку почты;
  • Несовместимость с кастомными статусами заказов.

Пошаговое решение проблемы

1. Настройка SMTP для надежной отправки

На большинстве хостингов PHP mail() работает нестабильно. Настройте SMTP с помощью плагина WP Mail SMTP:

1. Установите и активируйте WP Mail SMTP.
2. В настройках введите SMTP-сервер вашего почтового провайдера (например, Gmail, Яндекс, Mail.ru).
3. Проверьте отправку тестового письма из настроек плагина.
4. Убедитесь, что письма приходят и логируются.

2. Проверка и исправление хуков, влияющих на отправку

Если есть кастомный код, который меняет отправку писем WooCommerce, проверьте его на ошибки. Например, для исправления отправки писем при смене статуса можно добавить такой код в functions.php темы или плагина:

add_action('woocommerce_order_status_changed', 'custom_send_email_on_status_change', 10, 4);
function custom_send_email_on_status_change($order_id, $old_status, $new_status, $order) {
    if ($new_status === 'completed') { // Или другой статус
        WC()->mailer()->get_emails()['WC_Email_Customer_Completed_Order']->trigger($order_id);
    }
}

Этот код явно вызывает отправку письма клиенту при смене статуса на «completed».

3. Проверка шаблонов писем WooCommerce

Если используются кастомные шаблоны, убедитесь, что они корректно работают. Для этого временно переключитесь на стандартную тему Storefront или другую официальную и отключите все плагины, кроме WooCommerce. Проверьте отправку письма. Если проблема исчезла — виноваты кастомные шаблоны или плагины.

4. Учет кастомных статусов заказа

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

add_filter('woocommerce_email_classes', 'add_custom_email_class');
function add_custom_email_class($emails) {
    require_once 'class-wc-email-customer-custom-status.php'; // ваш класс по примеру стандартных
    $emails['WC_Email_Customer_Custom_Status'] = new WC_Email_Customer_Custom_Status();
    return $emails;
}

add_action('woocommerce_order_status_my_custom_status_notification', array(WC()->mailer()->get_emails()['WC_Email_Customer_Custom_Status'], 'trigger'));

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

  • Отправьте тестовый заказ и измените его статус;
  • Проверьте логи плагина WP Mail Logging — письма должны быть отмечены как «отправлено»;
  • Убедитесь, что на почту, указанную в заказе, пришло письмо с корректным содержимым;
  • Проверьте папку «Спам»;
  • Просмотрите логи сервера на предмет ошибок PHP или SMTP.

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

  • Письма не отправляются, но в логах нет ошибок. Проверьте настройки SMTP, возможно, не настроен правильный порт или аутентификация.
  • Письма приходят, но пустые или с ошибками в шаблоне. Проверьте, не повреждены ли шаблоны писем в папке woocommerce/emails вашей темы.
  • Конфликт плагинов, отключение отправки. Отключите плагины по очереди, чтобы выявить виновника.
  • Письма не отправляются для кастомных статусов. Добавьте поддержку писем для этих статусов, как показано выше.

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

  • Используйте SMTP с TLS для шифрования почты;
  • Не храните пароли в открытом виде, используйте константы в wp-config.php или менеджеры секретов;
  • Избегайте рассылок через стандартный mail(), это часто приводит к попаданию в спам;
  • Используйте плагин Clearfy Pro (https://wpshop.ru/plugins/clearfy?utm_source=premiumwp.ru&utm_medium=article&utm_campaign=woocommerce-otpravka-pisem-pri-izmenenii-statusa-zakaza) для оптимизации кода и отключения ненужных функций, которые могут влиять на отправку писем;
  • Регулярно обновляйте WooCommerce и плагины для безопасности.

Сравнение способов решения проблемы

МетодПреимуществаНедостаткиКогда использовать
Настройка SMTP через WP Mail SMTPНадежная доставка, шифрованиеТребует настройки и учетных данныхДля всех сайтов, особенно на shared-хостингах
Использование стандартных хуков WooCommerceПростота, интеграция с ядромНе покрывает кастомные статусыКогда используются стандартные статусы заказов
Кастомный код для отправки писем на кастомные статусыГибкость, поддержка любых статусных сценариевТребует навыков PHP, поддержка кодаЕсли добавлены кастомные статусы
WooCommerce: как реализовать отложенную (ленивую) загрузку изображений товаров для ускорения сайта
09.06.2026
Как автоматизировать обновление метаданных в WordPress
09.01.2026
Как решить проблему конфликта JavaScript в WordPress
13.01.2026
Создание уникального типа записи с уникальным цветом в WordPress
04.02.2026
Как удалить временно сохраняющиеся черновики в WordPress
27.01.2026