Диагностика проблемы с отправкой писем в WooCommerce
Если после оформления заказа в WooCommerce покупатели или администраторы не получают уведомления по электронной почте, необходимо сначала убедиться, что проблема именно в системе отправки писем. Для этого:
- Проверьте, активированы ли уведомления в настройках WooCommerce
WooCommerce > Настройки > Email. - Посмотрите, не попадают ли письма в спам.
- Используйте плагин WP Mail Logging (https://ru.wordpress.org/plugins/wp-mail-logging/) для логирования всех отправляемых писем.
- Проверьте работу функции
wp_mail()на вашем хостинге, создав простой тестовый скрипт.
Тестирование отправки почты вручную
Создайте файл test-mail.php в корне сайта с таким кодом:
<?php
wp_mail('ваш_email@пример.ком', 'Тестовая почта', 'Если вы получили это письмо, отправка работает.');
?>И запустите его через браузер. Если письмо не приходит, проблема на уровне хостинга или конфигурации PHP.
Пошаговое решение проблем с отправкой писем в WooCommerce
1. Использование SMTP вместо стандартной функции wp_mail()
Большинство проблем с отправкой почты связаны с тем, что почтовый сервер хостинга блокирует функцию mail() PHP. Решение — настроить SMTP-сервер для отправки писем.
Рекомендуемые плагины:
Пример настройки SMTP через WP Mail SMTP (кратко):
- Установите и активируйте плагин.
- Перейдите в
WP Mail SMTP > Настройки. - Выберите SMTP как метод отправки.
- Введите данные SMTP-сервера вашего почтового провайдера (например, Gmail, Яндекс, Mail.ru, или корпоративный SMTP).
- Сохраните настройки и отправьте тестовое письмо.
2. Проверка шаблонов и хуков WooCommerce
Если письма не отправляются только для определённых статусов заказов или кастомных уведомлений, возможно, проблема в переопределении шаблонов email или хуков.
Проверьте, не отключены ли нужные уведомления в WooCommerce > Настройки > Email.
Если вы кастомизировали шаблоны писем в папке темы woocommerce/emails/, временно переименуйте папку, чтобы проверить отправку с дефолтными шаблонами.
3. Логирование и отладка через код
Для детального анализа можно добавить логирование в файл wp-content/debug.log с помощью функции:
add_action('woocommerce_email_before_send', function($email) {
error_log('Отправка письма: ' . $email->id);
});Это покажет, какие письма пытается отправить WooCommerce.
Проверка результата после внедрения
После настройки SMTP и проверки шаблонов:
- Отправьте тестовое письмо из плагина SMTP.
- Создайте тестовый заказ с разными статусами, чтобы проверить, приходят ли уведомления.
- Проверьте лог плагина WP Mail Logging — должны быть записи об отправленных письмах.
Частые ошибки и как исправить
- Письма не отправляются, хотя тест SMTP успешен. Проверьте, не перехватывают ли письма плагины безопасности или кастомный код, отключающий почту.
- Письма приходят в спам. Настройте DKIM, SPF и DMARC записи в DNS вашего домена для почтового сервера.
- Проблемы с кодировкой в письмах. Убедитесь, что тема письма и тело содержат правильную кодировку UTF-8, особенно если используются нестандартные символы.
- Кастомные уведомления не отправляются. Проверьте, что вызов
WC()->mailer()->send()сделан корректно с нужными параметрами.
Практические советы по безопасности и производительности
- Не храните пароли SMTP в коде — используйте настройки плагина с шифрованием.
- Ограничьте количество попыток отправки писем, чтобы избежать блокировок почтовых серверов.
- Используйте отдельный почтовый домен или поддомен для отправки писем WooCommerce, чтобы повысить доставляемость.
- Регулярно обновляйте плагины SMTP и WooCommerce для совместимости и безопасности.
Сравнение способов отправки почты в WooCommerce
| Способ | Преимущества | Недостатки |
|---|---|---|
Стандартная функция wp_mail() | Простая настройка, не требует плагинов | Могут блокировать хостинг или письма попадать в спам |
| SMTP с плагином (WP Mail SMTP, Post SMTP) | Высокая надежность доставки, поддержка популярных почтовых сервисов | Требует настройки и хранения данных SMTP |
| Сервисы сторонних SMTP (SendGrid, Mailgun) | Отслеживание доставки, масштабируемость | Платные сервисы, сложность настройки |