Диагностика проблемы с отправкой email уведомлений в WooCommerce
Частая ситуация — магазин на WooCommerce перестает отправлять уведомления о новых заказах на email администратора или клиента. Причины могут быть разными: неправильные настройки почты, конфликты с плагинами, проблемы с сервером SMTP или почтовыми функциями PHP.
Для проверки отправки почты используйте следующий тестовый скрипт в корне сайта:
<?php
$to = 'ваш_email@пример.ком';
$subject = 'Тест отправки почты';
$message = 'Если вы получили это письмо, почта работает корректно.';
$headers = 'From: webmaster@вашдомен.ру' . "\r\n" .
'Reply-To: webmaster@вашдомен.ру' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
if(mail($to, $subject, $message, $headers)) {
echo 'Почта отправлена успешно';
} else {
echo 'Ошибка при отправке почты';
}
?>Если письмо не приходит, проблема на уровне сервера или конфигурации PHP. Если письмо приходит, значит WooCommerce или тема могут блокировать отправку.
Пошаговое решение: отправка email уведомлений в WooCommerce без плагинов
1. Отключаем конфликтующие фильтры и плагины
Временно деактивируйте все плагины, кроме WooCommerce, и переключитесь на стандартную тему (например, Storefront). Проверьте отправку заказов. Если заработало — ищите конфликт в коде.
2. Реализуем кастомную отправку email для новых заказов
Добавьте в functions.php вашей темы следующий код, который перехватывает событие создания заказа и отправляет уведомление вручную:
add_action('woocommerce_thankyou', 'custom_send_order_email', 10, 1);
function custom_send_order_email($order_id) {
if (!$order_id) return;
$order = wc_get_order($order_id);
$to = get_option('admin_email'); // 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>Дата: ' . wc_format_datetime($order->get_date_created()) . '</p>';
$message .= '<p>Сумма: ' . $order->get_formatted_order_total() . '</p>';
$message .= '<p>Клиент: ' . $order->get_billing_first_name() . ' ' . $order->get_billing_last_name() . '</p>';
wp_mail($to, $subject, $message, $headers);
}Этот код сработает сразу после оформления заказа и отправит email администратору с основными данными заказа.
3. Проверяем правильность настроек email WooCommerce
Перейдите в WooCommerce - Настройки - Email. Убедитесь, что включены уведомления, указана правильная почта и шаблоны не повреждены.
Проверка результата после внедрения
- Сделайте тестовый заказ в магазине с реальным email администратора.
- Проверьте папку «Входящие» и «Спам» на почте администратора.
- Если письмо пришло, задача решена.
- Если нет — включите логирование email в WooCommerce. Для этого добавьте в wp-config.php строку
define('WP_DEBUG_LOG', true);и проверьте файлwp-content/debug.logна ошибки.
Частые ошибки и как их исправить
- Письма уходят в Спам — используйте корректные заголовки и SPF/DKIM записи у домена.
- Почта не отправляется из-за блокировки хостингом — уточните у провайдера, разрешена ли функция
mail()или настройте SMTP через wp_mail. - Конфликты с плагинами кеширования — отключите кеширование страницы оформления заказа.
- Некорректный формат письма — убедитесь, что заголовки содержат
Content-Type: text/html.
Практические советы по безопасности и производительности
- Не используйте устаревшие SMTP-сервисы с небезопасным подключением.
- Ограничьте количество отправляемых писем — для массовых рассылок используйте специализированные сервисы.
- Включите логирование почты на тестовом этапе для мониторинга сбоев.
- Используйте wp_mail() вместо прямого вызова
mail()для совместимости с WordPress.
Сравнение способов отправки уведомлений в WooCommerce
| Метод | Плюсы | Минусы |
|---|---|---|
| Стандартные email WooCommerce | Автоматическая отправка, шаблоны, поддержка локализации | Зависит от настроек сервера, иногда сбои |
| Кастомный хук с wp_mail() (как в статье) | Полный контроль над содержимым, легко отладить | Нужно писать код, нет визуального редактора шаблонов |
| Плагины SMTP (WP Mail SMTP и др.) | Надежная доставка, логирование, настройка через UI | Дополнительный плагин, может конфликтовать |