Диагностика проблемы с отправкой писем в WooCommerce
Если после оформления заказа в WooCommerce клиент не получает письмо подтверждения, это может быть связано с рядом причин — от неверных настроек почты до конфликтов с плагинами или серверными ограничениями. Первым делом необходимо проверить, отсылаются ли вообще письма WordPress и WooCommerce.
Как проверить, отправляет ли WordPress почту
Для проверки используйте плагин Check Email или отправьте тестовое письмо вручную через код:
add_action('admin_init', function() {
if (!isset($_GET['send_test_email'])) return;
wp_mail('your-email@example.com', 'Тест письма WordPress', 'Тестовое письмо для проверки отправки.');
exit('Письмо отправлено');
});Замените your-email@example.com на свой адрес и перейдите в админке по URL https://site.ru/wp-admin/?send_test_email=1. Если письмо не пришло — проблема на уровне сервера или почтовой настройки.
Пошаговое решение проблемы с письмами WooCommerce
1. Проверьте настройки WooCommerce Email
В админке перейдите WooCommerce > Настройки > Email. Убедитесь, что уведомления о новом заказе и подтверждение заказчику включены. Проверьте правильность адреса электронной почты и шаблонов.
2. Переопределите функцию отправки почты для логирования
Добавьте код в functions.php вашей темы для отладки отправки:
add_filter('woocommerce_email_send', function($send, $email) {
error_log('Отправка письма WooCommerce: ' . $email->id . ' - статус: ' . ($send ? 'успешно' : 'ошибка'));
return $send;
}, 10, 2);Посмотрите логи сервера (error_log) — появится информация о попытках отправки.
3. Используйте SMTP для отправки почты
Стандартная функция wp_mail() часто блокируется хостингом. Установите плагин WP Mail SMTP и настройте SMTP-сервер (например, Gmail, Mail.ru, или корпоративный SMTP). Пример настройки с PHPMailer:
// В wp-config.php или functions.php
add_action('phpmailer_init', function($phpmailer) {
$phpmailer->isSMTP();
$phpmailer->Host = 'smtp.mail.ru';
$phpmailer->SMTPAuth = true;
$phpmailer->Port = 465;
$phpmailer->SMTPSecure = 'ssl';
$phpmailer->Username = 'your-email@mail.ru';
$phpmailer->Password = 'your-password';
$phpmailer->From = 'your-email@mail.ru';
$phpmailer->FromName = 'Название сайта';
});Проверка результата после внедрения
После настройки SMTP отправьте тестовое письмо через WooCommerce:
- В админке WooCommerce > Настройки > Email выберите любой шаблон и нажмите «Отправить тестовое письмо».
- Оформите тестовый заказ на сайте и проверьте, приходит ли подтверждение на почту клиента.
Если письма приходят, значит проблема решена.
Частые ошибки и как их исправить
- Письма попадают в спам: настроите SPF, DKIM и DMARC записи для домена, используйте проверенный SMTP-сервер.
- Отсутствие отправки из-за хостинга: проверьте ограничения хостинг-провайдера, возможно, блокируется функция
mail(). - Конфликт с плагинами безопасности: временно отключите плагины вроде Wordfence, чтобы проверить отправку.
- Неверные email-шаблоны: проверьте кастомные шаблоны в
woocommerce/templates/emails, они могут содержать ошибки PHP.
Практические советы по безопасности и производительности
- Используйте SMTP с авторизацией и шифрованием (SSL/TLS) для безопасности писем.
- Не отключайте WooCommerce email-уведомления полностью, а лишь отключайте ненужные через фильтры.
- Для повышения производительности используйте кэширование страниц и не отправляйте письма прямо в процессе заказа — лучше использовать очередь (например, с плагином WP Offload SES или WP Mail Queue).
Сравнение вариантов решения
| Метод | Плюсы | Минусы |
|---|---|---|
Стандартная функция wp_mail() | Простота, встроено в WordPress | Часто блокируется хостингом, письма попадают в спам |
| SMTP через WP Mail SMTP | Надежная доставка, поддержка популярных почтовых сервисов | Требует настройки, возможно оплата SMTP-сервиса |
| Использование сторонних сервисов (SendGrid, Mailgun) | Высокая надежность, аналитика | Сложнее интеграция, дополнительные расходы |