Письма о заказах в WooCommerce: что настроить, чтобы доходили
Магазин принимает заказы, а письмо «Ваш заказ принят» клиент не видит. Разбираем четыре способа отправки — от PHP mail() до транзакционного сервиса — с ценой каждого и фильтрами WooCommerce, которыми правят получателей и текст.

Заказ оформлен, оплата прошла, в админке статус «Обработка» — а письма клиент не получил. В логе WooCommerce при этом честно написано, что письмо отправлено. Причина почти всегда одна: WordPress отдал письмо через wp_mail(), тот ушёл в mail() на хостинге, конверт подписан адресом вида wordpress@ваш-домен.ru, которого нет в SPF домена, и Gmail с Mail.ru либо отбили его, либо положили в спам. Привычный ход — поставить SMTP-плагин и вписать логин от рабочего ящика — закрывает половину случаев и ломается на лимитах ящика, на письмах админу и на таймауте при оформлении заказа. Ниже — четыре варианта отправки с ценой каждого, на примере магазина на WordPress 6.x и WooCommerce 9.x, PHP 8.1+.
Диагностика: где именно теряется письмо
Прежде чем менять транспорт, выясните, на каком из трёх участков обрыв: WooCommerce не формирует письмо, PHP не отдаёт его, или почтовый сервер получателя отказывается принимать.
- Проверьте, что письмо вообще должно уйти. WooCommerce → Настройки → Письма: нужный шаблон может быть просто выключен. Отдельно посмотрите, какой статус получает заказ при выбранном способе оплаты: оплата при получении обычно даёт «Обработка», а банковский перевод — «На удержании», и это разные письма. Если включено только «Заказ обрабатывается», клиент с переводом не получит ничего.
- Проверьте, что PHP отдаёт письмо. Самый быстрый тест — через WP-CLI на сервере:
wp eval 'var_dump( wp_mail( "you@example.com", "WooCommerce test", "test body" ) );'trueозначает только одно: функция приняла письмо и передала дальше. Это не доставка. - Посмотрите лог отправки. Любой нормальный SMTP-плагин ведёт журнал с кодом ответа сервера. Если лога нет — вы диагностируете вслепую, и это первое, что стоит включить.
- Проверьте DNS домена: SPF, DKIM, DMARC. Если DMARC стоит в
p=reject, а сервис отправки не подписывает письма вашим DKIM, отбиваться будет всё, включая письма администратору.
Четыре способа отправлять письма — и чем каждый платит
1. Как есть: PHP mail() на хостинге
Ничего не настраивается, работает из коробки. Цена — доставляемость. Адрес отправителя не совпадает с реальным почтовым хостом домена, обратной связи по доставке нет, у общего шаред-хостинга IP делится с сотней соседей. Для тестового стенда годится, для магазина с оплатой — нет.
2. SMTP рабочего ящика на своём домене
Плагин вроде FluentSMTP, Post SMTP или WP Mail SMTP, внутри — логин и пароль приложения от ящика в корпоративной почте (Яндекс 360, Mail.ru для бизнеса, собственный Postfix). Хост и порт берите из справки своего провайдера, а не из статей: обычно это 465 с SSL или 587 со STARTTLS, но провайдеры это меняют.
Что выигрываете: письма уходят с настоящего адреса, SPF и DKIM уже настроены провайдером почты, настройка — десять минут. Чем платите: суточные лимиты на отправку (у бизнес-почты это обычно сотни писем в сутки на ящик, точную цифру смотрите в тарифах) и отсутствие статистики по каждому письму. На ящик нельзя повесить ещё и рассылку — лимит общий.
3. Транзакционный сервис через API или SMTP
Unisender Go, SendPulse, Brevo, Anthropic SES, Mailgun — логика у всех одна: вы подтверждаете домен, добавляете их DKIM-запись в DNS, отправляете через их инфраструктуру и видите по каждому письму доставку, открытие, отбой и причину отбоя. Многие плагины умеют работать с такими сервисами по API, а не по SMTP, — это быстрее и переживает блокировку 25/465 порта на хостинге.
Цена: нужен доступ к DNS домена, нужно время на валидацию, и начиная с какого-то объёма это платно. Бесплатные тарифы обычно ограничены — лимит и условия сверяйте на сайте сервиса на день настройки, они меняются каждый год.
4. То же самое, но с отложенной отправкой
Важная деталь, про которую узнают во время распродажи: по умолчанию WooCommerce формирует и отправляет транзакционное письмо в том же HTTP-запросе, в котором покупатель нажал «Оплатить». Медленный SMTP-хендшейк на три секунды — это три секунды в оформлении заказа, а таймаут SMTP — это белый экран на странице оплаты. В WooCommerce есть фильтр, переносящий отправку транзакционных писем в фоновую очередь (Action Scheduler); точное имя и поведение по умолчанию сверьте в includes/class-wc-emails.php вашей версии или в документации разработчика.
Цена отложенной отправки: она держится на WP-Cron. Если в wp-config.php стоит DISABLE_WP_CRON, а системный cron никто не завёл, письма не «задержатся» — они не уйдут вообще.
| Подход | Что настраивать | Доставляемость и контроль | Ограничение |
|---|---|---|---|
| PHP mail() | Ничего | Нет лога, нет подписи, спам-папка по умолчанию | Непригодно для платящих клиентов |
| SMTP своего ящика | Плагин, пароль приложения | Подпись есть, лог только на уровне плагина | Суточный лимит ящика, общий с рассылками |
| Транзакционный сервис | Плагин, DKIM в DNS, подтверждение домена | Статус по каждому письму, причина отбоя | Нужен доступ к DNS, платно при объёме |
| Сервис + фоновая очередь | То же плюс рабочий cron | Оформление заказа не ждёт SMTP | Сломанный cron = писем нет совсем |
Когда что выбирать
Критерий простой: доступ к DNS и количество писем в сутки.
- До 20–30 заказов в сутки, DNS в чужих руках — SMTP рабочего ящика. Этого хватает, и это дёшево.
- Больше 50 писем в сутки или есть ещё и рассылка — транзакционный сервис. Ящик вы иначе выжжете и получите блокировку отправки в самый неподходящий день.
- Пики (распродажа, рассылка промокодов, импорт заказов) — сервис плюс фоновая отправка, иначе оформление заказа начнёт отваливаться по таймауту.
- Магазин ещё не в проде — оставьте mail(), но поставьте плагин-лог: вы будете видеть, какие письма формируются, не разгребая спам-папку.
«Письмо отправлено» в интерфейсе WordPress значит только то, что PHP передал его дальше. Факт доставки подтверждает исключительно лог почтового сервиса — всё остальное догадки.
Что править в самих письмах
Настройки и фильтры
Тему, заголовок и адрес отправителя меняйте на экране WooCommerce → Настройки → Письма, там же работают подстановки вида {site_title}, {order_number}, {order_date}. В код лезут за тем, чего в настройках нет: например, отправить копию письма о новом заказе на склад, но только по оплаченным заказам. Второй аргумент фильтра может приходить пустым при отрисовке страницы настроек, поэтому проверка типа обязательна.
// mu-plugin или functions.php дочерней темы. WooCommerce 9.x
add_filter( 'woocommerce_email_recipient_new_order', function ( $recipient, $order ) {
if ( ! $order instanceof WC_Order ) {
return $recipient;
}
// Склад получает копию только после оплаты
if ( $order->is_paid() ) {
$recipient .= ',sklad@example.com';
}
return $recipient;
}, 10, 2 );
По такому же принципу устроены фильтры получателей для остальных писем — имя собирается из идентификатора шаблона (customer_processing_order, customer_completed_order, failed_order и так далее). Полный список идентификаторов есть в исходниках WooCommerce в каталоге includes/emails/.
Шаблоны
Вёрстку письма правят копией шаблона в теме: файл из wp-content/plugins/woocommerce/templates/emails/ переносится в wp-content/themes/ваша-дочерняя-тема/woocommerce/emails/ с тем же именем. Правка файла внутри плагина живёт до первого обновления. Добавить блок после таблицы заказа (реквизиты, пункт выдачи, срок) можно и без копирования шаблона — через экшены WooCommerce вокруг таблицы заказа, они описаны в документации разработчика.
Что ломается чаще всего
- Письмо админу не приходит, клиентское приходит. Отправитель и получатель на одном домене, и почтовый сервер считает письмо подделкой от самого себя. Лечится корректным DKIM и отправкой админских писем на внешний ящик для проверки.
- Клиент с оплатой по реквизитам ничего не получает. Включено письмо «Заказ обрабатывается», а заказ висит в статусе «На удержании». Включите соответствующий шаблон.
- Работало, перестало после смены хостинга. На новом сервере закрыты исходящие 25 и 465. Переходите на отправку по API сервиса или на 587.
- Письма ушли, но массово в спам после подключения сервиса. DKIM-запись добавлена не для того поддомена или не распространилась. Проверьте домен в панели сервиса, а не на глаз.
- Тихие сбои. Если отправка падает, WordPress бросает
wp_mail_failed. Без обработчика вы об этом не узнаете:add_action( 'wp_mail_failed', function ( WP_Error $error ) { error_log( 'wp_mail failed: ' . $error->get_error_message() ); } );
Отдельная тема — маркетинговые рассылки и требования крупных провайдеров к массовым отправителям (Google и Yahoo ужесточили их с февраля 2024 года). Здесь речь только о транзакционных письмах магазина.
Что делать дальше
После того как тестовое письмо дошло до Gmail и Mail.ru без папки «Спам», сделайте три вещи. Включите хранение лога отправки хотя бы на 30 дней — без него разбор жалобы «мне не пришло» превращается в гадание. Настройте уведомление о неудачных отправках на внешний ящик или в мессенджер: обрыв отправки обычно замечают через сутки, когда накопились звонки. И повесьте на мониторинг время ответа страницы оформления заказа: если отправка идёт синхронно, деградация SMTP сразу видна в этой метрике.
Дальше имеет смысл проверить DMARC-отчёты по домену и убедиться, что через него не отправляет кто-то ещё — старая CRM, забытый сервис рассылок, тестовый стенд.
DKIM — криптографическая подпись исходящего письма закрытым ключом отправителя; открытый ключ публикуется в DNS домена, и принимающий сервер по нему проверяет, что письмо отправлено с разрешением владельца домена и не изменилось в пути.
Контент-конвейер: Из одной идеи — текст, изображение, озвучка и ролик. Один заказ вместо четырёх.
Спросить за 60 ₽Источники: wp_mail() — справочник разработчика WordPress, WooCommerce: документация по настройке писем и справочник хуков для разработчиков
Частые вопросы
У меня WooCommerce 8.x, а не 9.x — всё описанное работает?
Поставил SMTP-плагин, тест проходит, а письма о заказах всё равно не уходят. Что смотреть?
Можно отправлять письма с бесплатного ящика на Яндексе или Gmail?
Как добавить в письмо номер отслеживания или адрес пункта выдачи?
Насколько это рискованно трогать на работающем магазине?
Почему письма иногда приходят с задержкой в час и больше?
Материал носит информационный характер и подготовлен редакцией «Агентуры». Он не является офертой, рекламой или индивидуальной консультацией. Упомянутые продукты, компании и торговые знаки принадлежат их правообладателям. Перед принятием решений, влекущих юридические или финансовые последствия, обратитесь к профильному специалисту.