Диагностика проблемы: почему письма WooCommerce не отправляются
Часто после установки или обновления WooCommerce пользователи сталкиваются с проблемой: письма о заказах, восстановлении пароля или уведомления администратора не доходят до адресатов. Причин может быть несколько:
- Неправильно настроен SMTP-сервер на хостинге;
- PHP-функция
mail()отключена или работает некорректно; - Конфликты с другими плагинами, которые перехватывают отправку почты;
- Ошибки в шаблонах писем WooCommerce;
- Проблемы с DNS и SPF-записями домена, из-за чего письма попадают в спам.
Первым шагом проверьте, работают ли системные уведомления WordPress, например, восстановление пароля. Если и они не отправляются, проблема глобальная по серверу.
Как отладить и настроить отправку писем WooCommerce без плагинов
1. Проверка работы функции mail() на сервере
Создайте простой тестовый PHP-файл mail-test.php в корне сайта со следующим кодом:
<?php
$to = 'youremail@example.com';
$subject = 'Test mail';
$message = 'This is a test email from your server.';
$headers = 'From: no-reply@yourdomain.com' . "\r\n" .
'Reply-To: no-reply@yourdomain.com' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
if(mail($to, $subject, $message, $headers)) {
echo 'Mail sent successfully';
} else {
echo 'Mail sending failed';
}
?>Зайдите на http://yourdomain.com/mail-test.php и проверьте результат. Если "Mail sending failed", значит проблема на уровне сервера — обратитесь в техподдержку хостинга или настройте SMTP.
2. Перенаправление отправки писем WordPress на SMTP вручную
Чтобы обойти проблемы с mail(), можно реализовать SMTP-отправку в коде темы или плагина. Добавьте в functions.php вашей темы следующий код:
add_action('phpmailer_init', 'custom_phpmailer_smtp');
function custom_phpmailer_smtp(PHPMailer $phpmailer) {
$phpmailer->isSMTP();
$phpmailer->Host = 'smtp.yourprovider.com'; // SMTP-сервер
$phpmailer->SMTPAuth = true;
$phpmailer->Port = 587; // или 465
$phpmailer->Username = 'your_smtp_login';
$phpmailer->Password = 'your_smtp_password';
$phpmailer->SMTPSecure = 'tls'; // или 'ssl'
$phpmailer->From = 'no-reply@yourdomain.com';
$phpmailer->FromName = 'Your Site Name';
}Обязательно замените параметры на свои данные SMTP. Этот способ не требует установки плагинов и позволяет надежно отправлять письма.
3. Проверка шаблонов писем WooCommerce
Некорректный код в переопределенных шаблонах писем может препятствовать отправке. Проверьте папку yourtheme/woocommerce/emails/. Для диагностики временно отключите кастомные шаблоны, переименовав папку.
Проверка результата после внедрения
После настройки SMTP и проверки шаблонов выполните следующие действия для проверки:
- Создайте тестовый заказ в WooCommerce и проверьте, приходит ли уведомление покупателю и администратору;
- Сбросьте пароль пользователя и проверьте получение письма;
- Посмотрите логи почтового сервера (если есть доступ) на предмет ошибок;
- Проверьте папку «Спам» у получателей.
Частые ошибки и как их исправить
- Ошибка: письма попадают в спам или не доходят
Проверьте SPF, DKIM и DMARC записи DNS. Без корректных записей почтовые сервисы могут блокировать письма. - Ошибка: SMTP-сервер не отвечает
Убедитесь, что порт и адрес SMTP правильные, а на сервере не блокируется исходящий трафик. - Ошибка: конфликт с другими плагинами
Отключите сторонние плагины, связанные с почтой, чтобы проверить конфликт. - Ошибка: некорректные права на папки с шаблонами WooCommerce
Проверьте права доступа на папки и файлы шаблонов, они должны быть читаемы веб-сервером.
Практические советы по безопасности и производительности
- Используйте отдельный email-аккаунт для отправки системных писем, чтобы уменьшить риск компрометации.
- Не храните SMTP-пароли в открытом виде в
functions.php. Лучше использоватьwp-config.phpили переменные окружения. - Для массовой рассылки используйте специализированные сервисы (SendGrid, Mailgun) с API, чтобы избежать проблем с блокировкой.
- Отключите SMTP-отправку, если сайт находится в стадии разработки, чтобы не засорять почтовый ящик тестовыми письмами.