Диагностика проблемы с отправкой писем в 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, поддержка кода | Если добавлены кастомные статусы |