Диагностика проблемы: почему не отправляется письмо с подтверждением заказа
Часто пользователи WooCommerce сталкиваются с тем, что покупатель не получает письмо с подтверждением заказа сразу после оформления покупки. Основные причины:
- Почтовая функция сервера не настроена или блокируется;
- Конфликт плагинов, отключающих стандартные email-уведомления;
- Кастомный код, который перезаписывает процесс отправки писем;
- Проблемы с шаблонами писем WooCommerce;
- Использование SMTP-сервисов без корректной настройки.
Для выявления проблемы сначала включите логирование почты и проверьте журнал, чтобы убедиться, что WooCommerce инициирует отправку письма.
Пошаговое решение: добавляем и настраиваем автоматическую отправку письма после покупки
1. Проверяем базовую отправку писем WooCommerce
В админке WordPress перейдите в WooCommerce → Настройки → Email. Убедитесь, что уведомление "Новый заказ" и "Обработка заказа" включены.
2. Настраиваем SMTP для надежной доставки
Используйте плагин WP Mail SMTP, чтобы настроить SMTP-сервер (например, Gmail, SendGrid). Это исключит проблемы с почтовой функцией PHP mail().
3. Добавляем кастомное письмо с подтверждением
Если стандартное письмо не подходит, добавьте отправку собственного уведомления после смены статуса заказа на "обработка". Для этого в functions.php темы или в кастомном плагине добавьте следующий код:
add_action('woocommerce_order_status_processing', 'custom_send_order_confirmation_email', 10, 1);
function custom_send_order_confirmation_email($order_id) {
if (!$order_id) return;
$order = wc_get_order($order_id);
// Email покупателя
$to = $order->get_billing_email();
$subject = 'Подтверждение вашего заказа №' . $order->get_order_number();
$headers = array('Content-Type: text/html; charset=UTF-8');
$message = '<h2>Спасибо за заказ!</h2>';
$message .= '<p>Ваш заказ №' . $order->get_order_number() . ' принят в обработку.</p>';
$message .= '<p>Мы свяжемся с вами в ближайшее время.</p>';
wp_mail($to, $subject, $message, $headers);
}4. Кастомизация шаблона письма
Для более сложных писем создайте шаблон в папке темы woocommerce/emails, скопировав нужный шаблон из плагина WooCommerce и изменив его по своему усмотрению.
Проверка результата: как убедиться, что письмо отправляется
- Зарегистрируйте тестовый заказ в магазине, используя собственный email.
- Проверьте папки «Входящие» и «Спам» в почтовом ящике.
- Включите логирование почты через WP Mail SMTP или Debug Bar Email для отслеживания отправки.
- Используйте консоль браузера и инструменты разработчика для проверки ошибок JavaScript, если письмо отправляется после AJAX-запроса.
Частые ошибки и их исправление
- Письмо не приходит или попадает в спам: настройте SMTP, добавьте SPF, DKIM-записи в DNS хостинга.
- Код не срабатывает: проверьте, правильно ли подключен
functions.php, нет ли ошибок синтаксиса. - Дублирование писем: проверьте, не вызывается ли функция отправки несколько раз (например, из-за нескольких хуков).
- Конфликты с другими плагинами: временно отключите плагины, связанные с почтой или заказами, чтобы выявить причину.
Практические советы по безопасности и производительности
- Используйте проверенные SMTP-сервисы с поддержкой шифрования TLS.
- Не отправляйте тяжелые вложения через письма WooCommerce — лучше используйте ссылки.
- Кешируйте результаты запросов к API почтовых сервисов, если используете сторонние интеграции.
- Проверяйте обновления WooCommerce и плагинов для совместимости и безопасности.
Сравнение вариантов отправки писем в WooCommerce
| Вариант | Плюсы | Минусы | Пример |
|---|---|---|---|
| Стандартное уведомление WooCommerce | Простота, встроено | Мало гибкости | Включить в настройках Email |
| Кастомный хук с wp_mail() | Полная кастомизация | Требует кода, поддержка SMTP | Пример кода выше |
| Плагины SMTP | Надёжность доставки | Дополнительная настройка | WP Mail SMTP |