Диагностика проблемы с отправкой писем в WooCommerce
Проблема, когда WooCommerce не отправляет письма после оформления заказа, чаще всего связана с настройками сервера, почтового транспорта или конфликтами плагинов. Чтобы диагностировать, нужно проверить следующие моменты:
- Отправляются ли вообще письма с WordPress (например, тестовое письмо через плагин WP Mail SMTP);
- Активен ли SMTP-сервер и корректно ли он настроен;
- Не блокирует ли хостинг исходящую почту (ограничения на SMTP или PHP mail);
- Отсутствуют ли конфликты с плагинами, которые могут перехватывать отправку почты;
- Корректно ли настроены email-адреса получателей в панели WooCommerce;
- Есть ли ошибки в логах PHP или WooCommerce.
Проверка отправки email вручную
Установите и активируйте плагин WP Mail SMTP для отправки тестового письма. Если письмо не приходит, проблема в настройках сервера или SMTP.
Пошаговое решение проблемы с неотсылкой писем в WooCommerce
1. Настройка SMTP для надежной отправки писем
Использование стандартной функции wp_mail() часто ограничено сервером. Для надежности подключите SMTP через плагин WP Mail SMTP:
- Установите и активируйте WP Mail SMTP;
- В настройках укажите SMTP-сервер вашего почтового провайдера (например, Gmail, Яндекс, Mail.ru или корпоративный SMTP);
- Введите логин и пароль для SMTP;
- Установите порт (обычно 465 для SSL или 587 для TLS);
- Отправьте тестовое письмо и убедитесь, что почта уходит.
2. Проверка хуков WooCommerce для отправки писем
WooCommerce использует хук woocommerce_order_status_changed для отправки уведомлений. Иногда письма не отправляются, если статус заказа не меняется правильно или фильтры отключают отправку.
Добавьте следующий код в functions.php вашей темы для логирования отправки писем:
add_action('woocommerce_order_status_changed', 'log_email_sending', 10, 4);
function log_email_sending($order_id, $old_status, $new_status, $order) {
error_log("Order #$order_id changed status from $old_status to $new_status");
if ( $new_status === 'processing' ) {
// Пример: отправка письма
$mailer = WC()->mailer();
$mails = $mailer->get_emails();
if ( ! empty( $mails ) ) {
foreach ( $mails as $mail ) {
if ( $mail->id === 'customer_processing_order' ) {
$mail->trigger( $order_id );
error_log("Email customer_processing_order triggered for order #$order_id");
}
}
}
}
}3. Очистка и обновление email шаблонов
Если шаблоны писем повреждены, письма могут не отправляться. Перейдите в WooCommerce > Настройки > Электронные письма, сбросьте настройки шаблонов или загрузите их заново.
Проверка результата после внедрения
- Создайте тестовый заказ в магазине с разными статусами (в ожидании, в обработке, выполнен);
- Проверьте, приходят ли письма на почту покупателя и администратора;
- Проверьте логи сервера и WP_DEBUG, чтобы убедиться, что ошибок отправки почты нет;
- Используйте тест отправки письма через WP Mail SMTP, чтобы проверить общую работоспособность почтовой системы.
Частые ошибки и как их исправить
- Письма попадают в спам: настройте SPF, DKIM и DMARC записи в DNS для домена, используйте SMTP с авторизацией и TLS;
- Письма не отправляются из-за ограничений хостинга: уточните у хостера, разрешена ли исходящая почта через PHP mail или SMTP, используйте сторонний SMTP сервис;
- Конфликты с плагинами: отключите все плагины, кроме WooCommerce и SMTP, проверьте отправку писем, затем включайте по очереди;
- Неправильные email адреса: убедитесь, что в настройках WooCommerce указаны правильные email для получателей уведомлений;
- Ошибка в коде темы или плагина: проверьте логи ошибок, исправьте некорректные хуки и фильтры, которые могут блокировать
wp_mail().
Практические советы по безопасности и производительности
- Используйте SMTP с TLS для защиты передаваемых данных;
- Отключайте отправку писем при тестировании на локальных серверах, чтобы избежать спама;
- Логируйте отправку писем для мониторинга и отладки;
- Для массовой рассылки используйте специализированные сервисы (Mailgun, SendGrid), чтобы избежать блокировок;
- Регулярно обновляйте WooCommerce и плагины для безопасности почтовой системы.
Сравнение способов отправки почты в WooCommerce
| Метод | Плюсы | Минусы | Когда использовать |
|---|---|---|---|
| PHP mail() | Встроенный, не требует настройки | Низкая надежность, спам-фильтры | Тестовые и простые сайты |
| SMTP через плагин | Высокая надежность, поддержка авторизации | Нужна настройка, возможны ограничения хостинга | Любые рабочие сайты, магазины |
| Сторонние сервисы (SendGrid, Mailgun) | Высокая масштабируемость, аналитика | Платные, требует интеграции | Массовая рассылка, крупные проекты |