Диагностика проблемы с отправкой писем в WooCommerce
Если письма от WooCommerce не доходят до клиентов или администраторов, первое, что нужно проверить — работает ли вообще отправка почты на сервере. Проверьте системные логи и настройки SMTP сервера. Часто проблемы связаны с неправильной конфигурацией PHP mail() или ограничениями хостинга.
Проверьте, не попадут ли письма в спам, используя сервисы типа Mail-tester.com.
Проверка базовой отправки почты в WordPress
Добавьте в functions.php темы следующий код для теста отправки письма:
add_action('init', function() {
if (isset($_GET['test_email'])) {
wp_mail('youremail@example.com', 'Тест отправки', 'Если вы получили это письмо, отправка работает.');
exit('Письмо отправлено');
}
});Перейдите на сайт с параметром ?test_email=1 и проверьте почту.
Пошаговое решение: настройка отправки писем WooCommerce без плагинов
1. Настройка заголовков отправки
WooCommerce по умолчанию использует стандартный wp_mail(). Иногда нужно задать правильный заголовок From и Reply-To, чтобы письма не блокировались почтовыми серверами:
add_filter('woocommerce_email_headers', function($headers, $email_id, $order) {
$from_name = get_option('blogname');
$from_email = 'no-reply@' . parse_url(home_url(), PHP_URL_HOST);
$headers = "From: {$from_name} <{$from_email}>\r\n";
$headers .= "Reply-To: support@example.com\r\n";
return $headers;
}, 10, 3);2. Использование SMTP через wp_mail()
Если почта не отправляется, настройте SMTP вручную, подключив PHPMailer:
add_action('phpmailer_init', function($phpmailer) {
$phpmailer->isSMTP();
$phpmailer->Host = 'smtp.mail.ru';
$phpmailer->SMTPAuth = true;
$phpmailer->Port = 465;
$phpmailer->Username = 'your_smtp_login';
$phpmailer->Password = 'your_smtp_password';
$phpmailer->SMTPSecure = 'ssl';
$phpmailer->From = 'no-reply@example.com';
$phpmailer->FromName = get_option('blogname');
});3. Настройка WooCommerce Email Options
В админке WooCommerce перейдите в WooCommerce → Настройки → Электронные письма и проверьте, что все email шаблоны активны и адреса получателей указаны корректно.
Проверка результата после внедрения
1. Выполните заказ на тестовом сайте и проверьте, что клиент получает письмо с подтверждением.
2. Включите логирование почты, добавив в wp-config.php:
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);Проверьте файл wp-content/debug.log на наличие ошибок, связанных с отправкой почты.
Частые ошибки и способы их исправления
- Письма попадают в спам: Проверьте SPF, DKIM и DMARC записи домена. Настройте корректный заголовок From.
- Ошибка SMTP: Проверьте правильность SMTP данных, порт и шифрование. Попробуйте альтернативные SMTP-серверы.
- Письма не отправляются при использовании PHP mail(): Проверьте ограничения хостинга и используйте SMTP.
- Конфликт плагинов: Отключите плагины, которые могут менять почтовую систему (например, другие SMTP плагины), чтобы избежать конфликтов.
Практические советы по безопасности и производительности
- Не храните SMTP пароли в открытом виде, используйте защищённые средства или константы в
wp-config.php. - Для массовой рассылки используйте внешние сервисы (SendGrid, Mailgun) — это снизит нагрузку и повысит доставляемость.
- Используйте кеширование WooCommerce со вниманием к email-страницам, чтобы не кэшировать динамический контент.
Сравнение вариантов отправки писем WooCommerce
| Способ | Плюсы | Минусы | Когда использовать |
|---|---|---|---|
| PHP mail() | Простота, встроено в PHP | Плохая доставляемость, ограничения хостинга | Тестовые или простые сайты |
| SMTP вручную (phpmailer_init) | Контроль, высокая доставляемость | Требует настройки, хранение паролей | Средние и крупные проекты |
| Плагины SMTP | Удобство, UI для настройки | Дополнительная нагрузка, возможные конфликты | Новички, без навыков кода |