Когда письма WooCommerce не приходят, первая реакция часто одна и та же: поставить ещё один SMTP-плагин или менять шаблон письма. Но правильная диагностика начинается раньше. Нужно разделить три разных этапа: WooCommerce решил отправить уведомление, WordPress передал его почтовому транспорту, а почтовый сервер получателя принял и доставил сообщение.
Если определить, на каком этапе цепочка обрывается, проблему обычно можно найти намного быстрее. Ниже — последовательность проверки для писем о новых заказах, оплате, обработке, отмене и других транзакционных уведомлений.
Сначала проверьте, какое письмо должно было отправиться
В WooCommerce → Settings → Emails находится список встроенных уведомлений. У каждого типа есть собственные условия отправки, получатели, тема, заголовок и формат. Например, New order предназначен для получателей магазина, а customer-уведомления зависят от состояния заказа.
Поэтому фраза «письма не работают» слишком общая. Зафиксируйте конкретный сценарий: какой заказ, какой статус, какое уведомление, кому оно должно было уйти и в какой момент.
Проверьте, включено ли уведомление и заполнен ли получатель
Откройте нужный email в настройках WooCommerce. Проверьте Enable/Disable и Recipient(s), если поле доступно для этого типа уведомления. Для административных писем получателем по умолчанию может быть адрес администратора сайта, но его могли изменить.
Также проверьте From name и From address. WooCommerce рекомендует использовать адрес на домене сайта, например orders@example.com, а не публичный адрес Gmail или Yahoo. Доменный отправитель проще корректно аутентифицировать и он меньше конфликтует с политиками почтовых провайдеров.
Transactional-emails log: главное место диагностики
Актуальная документация WooCommerce указывает, что попытки отправки транзакционных писем логируются. Для проверки создайте тестовый заказ или вызовите нужное уведомление, затем откройте WooCommerce → Status → Logs и выберите источник transactional-emails.
Лог помогает ответить на ключевой вопрос: WooCommerce пытался отправить письмо или нет. Если записи нет, нужно искать проблему в условиях уведомления, статусе заказа, конфликте кода или фатальной ошибке. Если запись есть и отправка передана дальше, следующий слой — транспорт и доставляемость.
Проверьте статус заказа
Письма WooCommerce тесно связаны с жизненным циклом заказа. Если платёжный шлюз не перевёл оплаченный заказ в ожидаемый статус, нужное customer-уведомление может не сработать. Поэтому рядом с email log всегда проверяйте order notes и историю статусов.
Для интеграций это особенно важно: webhook платёжной системы может прийти с задержкой, быть заблокирован WAF или завершиться ошибкой. Внешне покупатель оплатил, но WordPress всё ещё видит Pending payment — и проблема выглядит как «не пришло письмо».
Почему стандартной отправки PHP mail бывает недостаточно
WordPress формирует письмо через свою почтовую функцию, но конечная доставляемость зависит от сервера и его почтовой конфигурации. На shared-хостинге исходящая почта может иметь ограничения, плохую репутацию IP или некорректную обратную DNS-конфигурацию.
Поэтому для коммерческого магазина разумно использовать выделенный почтовый транспорт или SMTP/API-провайдера, который предназначен для транзакционных сообщений. Важно не название SMTP-плагина, а то, через какой сервис реально уходят письма и как аутентифицирован домен.
SPF, DKIM и DMARC: зачем они нужны
SPF сообщает принимающему серверу, какие системы имеют право отправлять почту от имени домена. DKIM добавляет криптографическую подпись, которую получатель может проверить через DNS. DMARC задаёт политику обработки сообщений, которые не проходят проверки, и позволяет получать отчёты.
WooCommerce прямо рекомендует проверить аутентификацию домена и настройки SPF, DKIM и DMARC у хостинга или SMTP-провайдера. Эти записи нельзя копировать из случайной инструкции: конкретные значения зависят от сервиса, который отправляет вашу почту.
Типичная ошибка: From не совпадает с реальным отправителем
Представим, что сайт shop.example.com отправляет письмо с From myshop@gmail.com, но физически сообщение уходит с сервера хостинга. Для принимающей стороны это выглядит подозрительно: сервер не относится к инфраструктуре Gmail, хотя письмо заявляет такой домен отправителя.
Лучше использовать адрес собственного домена, а для ответов клиента при необходимости настраивать Reply-To. В WooCommerce эти роли разделены: From определяет отправителя, а Reply-To может направлять ответы в другой ящик.
Как правильно подключать SMTP
- Выберите почтового провайдера или SMTP вашего домена.
- Добавьте домен и выполните требуемую DNS-аутентификацию.
- Настройте WordPress на отправку через выбранный транспорт.
- Используйте доменный From.
- Отправьте тестовое письмо.
- Создайте реальный тестовый заказ и проверьте именно WooCommerce notification.
- Сверьте лог WooCommerce и лог почтового провайдера.
Тест кнопкой «Send test» полезен, но он не заменяет тест заказа. В рабочем сценарии важны условия конкретного уведомления, статус заказа, данные шаблона и хуки сторонних расширений.
Если WooCommerce пишет «sent», а письма всё равно нет
Это означает, что диагностика переходит за пределы WooCommerce. Проверьте лог SMTP/API-провайдера: принят ли запрос, какой ответ получен от домена адресата, не было ли bounce, suppression или блокировки. Затем проверьте Spam/Junk у получателя.
Если провайдер показывает успешную доставку, а пользователь не видит письмо, полезно проверить правила ящика, корпоративные фильтры и конкретный адрес. Если провайдер отклонил сообщение, причина обычно указана кодом SMTP или текстом ответа.
Если записи transactional-emails вообще нет
Проверьте, что логирование WooCommerce включено и уровень логов не скрывает INFO/NOTICE. Затем воспроизведите сценарий на тестовом заказе. Если ожидаемой записи всё равно нет, смотрите fatal error log и конфликты плагинов/темы.
На сложном магазине полезно временно воспроизвести проблему на staging с минимальным набором расширений. Но на production нельзя бездумно отключать платёжные, складские и checkout-плагины во время продаж.
Кастомные письма и интеграции
Расширения WooCommerce могут добавлять собственные уведомления, а кастомный код — отправлять письма вообще вне стандартного класса email. Тогда источник transactional-emails может не описывать всю систему. Нужно проверить, каким кодом создаётся сообщение и через какой транспорт оно уходит.
Если письмо должно запускаться внешним событием — например, CRM, webhook или изменением статуса из ERP — сначала проверяется само событие. Подход к интеграциям и webhook-цепочкам разобран в материале об автоматизации WooCommerce через webhooks.
Минимальный чек-лист перед запуском магазина
- From использует домен магазина.
- SPF настроен для реального отправителя.
- DKIM проходит проверку.
- DMARC опубликован с подходящей политикой.
- SMTP/API-провайдер показывает успешную отправку.
- New order приходит менеджеру.
- Customer processing/completed приходит покупателю в нужных сценариях.
- Transactional-emails log содержит тестовые события.
- Тест выполнен на реальном жизненном цикле заказа.
Когда нужна техническая диагностика
Если часть писем приходит, а часть нет, проблема часто находится в условиях отправки, статусах или кастомном коде. Если WooCommerce логирует успешную передачу, но письма массово попадают в spam или отклоняются, нужно разбирать почтовый транспорт и DNS-аутентификацию.
A.S Groups занимается доработкой WooCommerce и технической поддержкой WordPress. При диагностике важно не просто «поставить SMTP», а проверить всю цепочку от заказа до ответа почтового сервера.
Итог
Если письма WooCommerce не приходят, двигайтесь сверху вниз: условия уведомления → статус заказа → transactional-emails log → WordPress transport → SMTP/API provider → SPF/DKIM/DMARC → почтовый сервер получателя. Такой порядок быстро отделяет ошибку магазина от проблемы доставляемости.
Если нужна проверка конкретного магазина, пришлите описание проблемы, тип письма и пример статуса заказа — можно определить, на каком этапе цепочка обрывается.
Обсуждение
Вопросы и комментарии
Можно уточнить детали статьи или поделиться своим опытом. Первый комментарий проходит проверку.