Диагностика проблемы с отправкой писем в WooCommerce
Если WooCommerce не отправляет уведомления покупателям при смене статуса заказа (например, «обработка», «выполнен», «отменён»), первым делом нужно определить источник проблемы. Возможные причины:
- Некорректные настройки почты на сервере или в WordPress;
- Конфликты с плагинами, особенно с SMTP, кэшированием или безопасностью;
- Проблемы с шаблонами писем WooCommerce;
- Ошибки в пользовательских фильтрах или хуках, связанных с отправкой писем;
- Отсутствие или неправильная настройка SMTP для отправки писем.
Для диагностики включите логирование почты через WooCommerce: WooCommerce → Статус → Логи, выберите лог с пометкой «email» и проверьте ошибки.
Проверка отправки писем по умолчанию
Создайте тестовое письмо через стандартный PHP mail в WordPress, чтобы исключить проблемы с сервером:
wp_mail('you@example.com', 'Тестовое письмо', 'Если вы получили это письмо, отправка работает.');Если письмо не приходит, нужно настраивать серверную почту или использовать SMTP.
Пошаговое решение проблемы с отправкой писем при смене статуса заказа
1. Установка и настройка SMTP
Рекомендуется использовать плагин WP Mail SMTP или аналогичный. После установки:
- Перейдите в
Настройки → WP Mail SMTP; - Выберите почтовый сервис (SMTP-сервер вашего хостинга, Gmail, Mailgun и др.);
- Введите данные SMTP: хост, порт, логин, пароль;
- Сохраните настройки и отправьте тестовое письмо из панели плагина.
2. Проверка и восстановление шаблонов писем WooCommerce
Если шаблоны были изменены, возможно, они вызывают сбой отправки. Для проверки:
- Перейдите в
WooCommerce → Статус → Шаблоны; - Сравните кастомные шаблоны с дефолтными;
- Попробуйте временно переименовать папку кастомных шаблонов
woocommerce/emailsв вашей теме; - Проверьте, отправляются ли письма с дефолтными шаблонами.
3. Отключение конфликтующих плагинов
Временно деактивируйте плагины, которые могут влиять на отправку почты: кеширование (например, WP Super Cache), безопасность (WordFence), плагин SMTP (если установлен более одного).
4. Проверка пользовательских хуков, влияющих на email
Поищите в functions.php или плагинах фильтры и действия, которые изменяют поведение почты, например:
add_filter( 'woocommerce_email_enabled_customer_completed_order', '__return_false' );Если найдёте что-то похожее, временно отключите этот код.
Как проверить, что проблема решена
После внесения изменений:
- Создайте тестовый заказ в WooCommerce;
- Измените статус заказа на «Обработка» или «Выполнен»;
- Проверьте почтовый ящик, указанный в заказе — должно прийти уведомление;
- Проверьте логи WooCommerce на наличие ошибок;
- Если письма не приходят, повторите диагностику.
Частые ошибки и как их исправить
- Письма уходят в спам. Добавьте SPF, DKIM и DMARC записи для вашего домена в DNS. Используйте SMTP с аутентификацией.
- Письма не отправляются из-за ограничений хостинга. Обратитесь в поддержку или переключитесь на внешний SMTP сервис.
- Несовместимость плагинов SMTP и кеширования. Отключите кеширование для страниц, где происходит отправка почты или отключите плагин кеша.
- Неправильно настроены права на файлы шаблонов писем. Проверьте права 644 для файлов и 755 для папок.
Практические советы по безопасности и производительности
- Используйте отдельный SMTP аккаунт с ограниченными правами для отправки почты, чтобы минимизировать риски.
- Не храните пароли SMTP в открытом коде, используйте константы в
wp-config.php. - Отключите отправку писем при тестировании на локальной среде, чтобы не спамить клиентов.
- Регулярно обновляйте WooCommerce и плагины SMTP, чтобы избежать уязвимостей.
Пример кода для отключения отправки письма при смене статуса
add_filter( 'woocommerce_email_enabled_customer_completed_order', '__return_false' ); // Отключить письмо при статусе "выполнен"Пример кастомной функции для логирования отправленных писем
add_action( 'woocommerce_mail_failed', 'log_failed_woocommerce_mail', 10, 1 );
function log_failed_woocommerce_mail( $wp_error ) {
error_log( 'Ошибка отправки WooCommerce письма: ' . print_r( $wp_error, true ) );
}Сравнение способов настройки отправки писем
| Метод | Плюсы | Минусы | Пример |
|---|---|---|---|
| PHP mail() | Простота, не требует настройки | Низкая надежность, письма часто попадают в спам | wp_mail() |
| SMTP через плагин | Надежность, поддержка аутентификации, меньше спама | Требует настройки, возможны конфликты | WP Mail SMTP |
| Внешние сервисы (Mailgun, SendGrid) | Высокая доставляемость, аналитика | Платные, сложнее настраивать | API сервисов + SMTP |