Диагностика проблемы: почему WooCommerce перестал отправлять письма
После обновления WooCommerce или WordPress часто возникает ситуация, когда магазин перестает отправлять уведомления клиентам и администраторам. Это могут быть письма о новых заказах, смене статуса заказа, регистрациях и т.д. Основные причины:
- Конфликт с новой версией WooCommerce или WordPress
- Проблемы с SMTP-сервером или почтовыми настройками хостинга
- Отключение стандартной функции
wp_mail()или замена на сторонние SMTP-плагины - Ошибки в теме или плагинах, влияющие на почтовую отправку
- Задержки или блокировки на стороне почтового сервера из-за спам-фильтров
Как проверить, что письма не отправляются
- Создать тестовый заказ и проверить, приходит ли письмо клиенту и администратору
- Посмотреть в WooCommerce > Статусы заказов, если письмо должно быть отправлено, но не пришло
- Проверить логи сервера и логи почтового сервера, если доступен
- Использовать плагины для логирования почты, например,
WP Mail Loggingдля фиксации попыток отправки
Пошаговое решение: исправляем отправку писем в WooCommerce
1. Проверяем базовую отправку писем WordPress
Создайте файл mail-test.php в корне сайта с таким кодом:
<?php
$to = 'your-email@example.com';
$subject = 'Тест отправки почты';
$message = 'Это тестовое письмо от WordPress';
$headers = ['Content-Type: text/html; charset=UTF-8'];
if(wp_mail($to, $subject, $message, $headers)) {
echo 'Письмо отправлено успешно';
} else {
echo 'Ошибка отправки письма';
}
?>Откройте этот файл в браузере. Если письмо не отправляется, проблема на уровне хостинга или WordPress.
2. Настройка SMTP для надежной отправки
Установите плагин WP Mail SMTP и настройте через SMTP вашего почтового сервиса (Gmail, Яндекс, SendGrid и др.). Это решит проблемы с блокировкой исходящей почты хостингом.
Пример базовой настройки для Gmail:
- SMTP Host: smtp.gmail.com
- SMTP Port: 465 (SSL) или 587 (TLS)
- Authentication: включена
- Username и пароль — ваши Google аккаунт
3. Проверяем шаблоны писем WooCommerce
Если письма отправляются, но содержимое отсутствует или шаблон сломан, проверьте, не переопределены ли шаблоны в wp-content/themes/your-theme/woocommerce/emails/. Попробуйте временно переключить тему на стандартную (например, Storefront) и проверить отправку.
4. Отключаем конфликтующие плагины
Отключите все плагины, кроме WooCommerce и SMTP, затем проверьте отправку. Если заработало — включайте плагины по одному, чтобы выявить конфликт.
5. Принудительная отправка почты в коде
Для отладки можно добавить хук в functions.php темы, чтобы программно отправить письмо при смене статуса заказа:
add_action('woocommerce_order_status_completed', 'send_custom_email_on_completed');
function send_custom_email_on_completed($order_id) {
$order = wc_get_order($order_id);
$to = $order->get_billing_email();
$subject = 'Ваш заказ завершен';
$message = 'Спасибо за покупку! Ваш заказ #' . $order_id . ' завершен.';
wp_mail($to, $subject, $message);
}Если это письмо приходит, значит функция wp_mail() работает.
Проверка результата после внедрения
- Оформите тестовый заказ в магазине
- Проверьте, приходит ли письмо на почту клиента и администратора
- Используйте логи плагина WP Mail SMTP или WP Mail Logging для просмотра попыток отправки
- Проверьте папку «Спам», если письма не отображаются во «Входящих»
Частые ошибки и как их исправить
- Письма попадают в спам: Настройте SPF, DKIM и DMARC записи для вашего домена. Это проверяется через панель хостинга или DNS.
- SMTP плагин не подключается: Проверьте правильность логина и пароля, используйте специальные пароли приложений (например, для Gmail).
- Письма не отправляются после обновления WooCommerce: Проверьте, не изменились ли хуки, используемые плагинами для отправки почты. Обновите плагины и тему.
- Тема переопределяет шаблоны писем некорректно: Временно переключитесь на стандартную тему WooCommerce и проверьте работоспособность.
Практические советы по безопасности и производительности
- Используйте SMTP с аутентификацией, избегайте стандартной
mail()функции PHP для надежной доставки. - Регулярно обновляйте WooCommerce и плагины, чтобы избежать уязвимостей в почтовой системе.
- Логируйте отправку почты, чтобы быстро выявлять сбои.
- Используйте отдельный почтовый домен или субдомен для рассылок, чтобы не понижать репутацию основного домена.
Сравнение способов отправки писем в WooCommerce
| Метод | Преимущества | Недостатки |
|---|---|---|
| Стандартная wp_mail() | Простота, без установки плагинов | Может блокироваться хостингом, письма в спам |
| SMTP через плагин (WP Mail SMTP) | Надежная доставка, аутентификация | Нужна настройка, возможны проблемы с паролями |
| Внешние сервисы (SendGrid, Mailgun) | Высокая доставляемость, аналитика | Требуется регистрация и интеграция |