Диагностика проблемы с отправкой писем WooCommerce
Если WooCommerce перестал отправлять уведомления о смене статуса заказа, первым делом нужно проверить несколько ключевых моментов:
- Активна ли функция отправки email в WooCommerce (
WooCommerce > Настройки > Email) и настроены ли нужные уведомления; - Правильно ли настроен SMTP-сервер на хостинге — стандартная функция PHP
mail()часто блокируется; рекомендуется использовать SMTP с аутентификацией; - Не конфликтуют ли плагины, связанные с почтой или WooCommerce (например, плагины безопасности, кеширования);
- Проверить логи сервера почты и WooCommerce (если включены) на наличие ошибок отправки;
- Убедиться, что тема или кастомный код не отключают хуки отправки писем.
Пошаговое решение: настраиваем корректную отправку email в WooCommerce через SMTP
1. Установка и настройка SMTP-плагина
Для надежной доставки писем используйте плагин WP Mail SMTP (https://ru.wordpress.org/plugins/wp-mail-smtp/). После установки и активации:
- Перейдите в
WP Mail SMTP > Settings; - Выберите SMTP-провайдера (например, Gmail, Яндекс, Mail.ru или собственный SMTP-сервер хостинга);
- Заполните поля SMTP-сервера, порт, метод шифрования, логин и пароль;
- Сохраните настройки и отправьте тестовое письмо из интерфейса плагина.
2. Проверка и включение писем WooCommerce
Перейдите в WooCommerce > Настройки > Email и убедитесь, что нужные уведомления активированы, например:
- Новый заказ;
- Обработка заказа;
- Завершённый заказ;
- Отменённый заказ.
При необходимости отредактируйте шаблоны писем или проверьте, что они не отключены.
3. Проверка пользовательских изменений
Если вы кастомизировали функционал отправки писем через хуки типа woocommerce_email_enabled_{email_id} или woocommerce_email_recipient_{email_id}, временно отключите этот код и проверьте, отправляются ли письма.
Пример кода для отладки: принудительная отправка письма о новом заказе
add_action('woocommerce_thankyou', 'force_send_new_order_email', 20, 1); function force_send_new_order_email($order_id) { if (!$order_id) return; $order = wc_get_order($order_id); if (!$order) return; $mailer = WC()->mailer(); $mails = $mailer->get_emails(); if (!empty($mails['WC_Email_New_Order'])) { $mails['WC_Email_New_Order']->trigger($order_id); } }Добавьте этот код в файл functions.php вашей темы для проверки, отправляется ли письмо о новом заказе.
Проверка результата после внедрения
- Отправьте тестовый заказ на сайте;
- Проверьте, пришло ли уведомление на email администратора и покупателя;
- Если письма не пришли, проверьте папку «Спам» и логи SMTP-плагина;
- Для дополнительной диагностики включите WP_DEBUG и WP_DEBUG_LOG в
wp-config.php, чтобы отслеживать ошибки.
Частые ошибки и как их исправить
- Письма уходят в спам — настройте SPF, DKIM и DMARC записи для домена, используйте SMTP с авторизацией и корректным From-адресом;
- Письма не отправляются из-за блокировки хостингом — используйте сторонний SMTP-сервис (Gmail, SendGrid, Mailgun);
- Конфликт плагинов — отключите плагины, связанные с почтой или кешированием, поочередно для выявления виновника;
- Кастомный код отключает отправку — проверьте все хуки, связанные с email, в functions.php и плагинах.
Практические советы по безопасности и производительности
- Не храните SMTP пароли в открытом виде — используйте константы в
wp-config.phpс ограниченным доступом; - Регулярно обновляйте плагины и WooCommerce для безопасности;
- Для массовой рассылки заказных уведомлений используйте очереди или сервисы рассылок, чтобы избежать блокировок;
- Используйте кеширование страниц с исключением страниц оформления заказа и личного кабинета.
Сравнение способов настройки отправки email в WooCommerce
| Метод | Плюсы | Минусы |
|---|---|---|
| Стандартная PHP mail() | Простая настройка, не требует плагинов | Низкая надежность, письма часто попадают в спам или не отправляются |
| SMTP через WP Mail SMTP | Надежная отправка, поддержка популярных почтовых сервисов, логирование | Требует настройки аккаунта SMTP и плагина |
| Собственный сервер рассылки (например, Mailgun) | Высокая масштабируемость, контроль доставки | Сложнее в настройке, требует дополнительных сервисов |