Документация / WooCommerce

Отправка писем о заказах WooCommerce через SMTP

Подтверждения заказов, чеки об оплате, уведомления об отправке и восстановление пароля — письма, которые магазин не может себе позволить потерять. Все они уходят через wp_mail() WordPress, а та по умолчанию ведёт в никуда. Ниже — как направить их в fmailer и настроить отправителя так, чтобы письма проходили DMARC.

Почему письма о заказах не доходят

У WooCommerce нет собственного почтового транспорта: всё идёт через wp_mail(), поэтому магазин наследует поведение WordPress — передать письмо функции PHP mail(), за которой на большинстве современных хостингов нет почтового сервера. Заказ оформляется, покупатель видит страницу «спасибо», подтверждение не приходит.

Там, где локальный сервер всё-таки есть, письмо уходит без подписи и с IP-адреса, которого нет в вашей записи SPF, — а неавторизованный чек из магазина выглядит ровно как фишинг, поэтому попадает в спам.

Шаг 1 — настройте SMTP в WordPress

Поскольку WooCommerce использует wp_mail(), достаточно настроить SMTP один раз на уровне WordPress — это покроет весь магазин. Следуйте инструкции по WordPress : подойдёт WP Mail SMTP, FluentSMTP или обработчик phpmailer_init без плагина. Отдельного плагина для WooCommerce не существует и не требуется.

Логин и пароль можно получить на странице управления токенами домена.

Параметры подключения

ПараметрЗначение
SMTP-хостsmtp.fmailer.ru
Порт587
ШифрованиеSTARTTLS (соединение переводится в TLS до авторизации)
ЛогинЛогин SMTP-токена вашего домена
ПарольПароль этого токена — показывается один раз, при создании
Каждый режим доступен и на высоком порту: 8465 (SSL/TLS), 8587 (STARTTLS) и 8025 (без шифрования). Многие хостинги и облака блокируют исходящие 25, 465 и 587 — если соединение отваливается по таймауту, используйте соответствующий высокий порт

Шаг 2 — адрес отправителя магазина

Откройте WooCommerce → Настройки → Письма и укажите в поле Адрес «От» адрес на подтверждённом домене — например orders@mail.example.ru. Именно эта настройка определяет, пройдут ли ваши чеки проверку DMARC.

Подпись DKIM и запись SPF опубликованы на вашем домене. Адрес в From: на чужом домене с ними не сходится, DMARC не проходит, и подтверждения заказов фильтруются — те самые письма, о пропаже которых покупатели жалуются чаще всего.

Если тема или сторонний плагин перебивают отправителя, зафиксируйте его:

php
/**
 * Жёстко задать отправителя для всех писем WooCommerce,
 * что бы ни стояло в настройках магазина и сторонних плагинах.
 */
add_filter( 'woocommerce_email_from_address', fn() => 'orders@mail.example.ru', 99 );
add_filter( 'woocommerce_email_from_name', fn() => 'Магазин', 99 );

Чтобы сотрудники отвечали прямо покупателю, но From: оставался согласованным, задайте Reply-To:

php
// From остаётся вашим, а отвечать сотрудники будут прямо покупателю.
add_filter( 'woocommerce_email_headers', function ( $headers, $email_id, $order ) {
    if ( 'new_order' === $email_id && $order ) {
        $headers .= 'Reply-To: ' . $order->get_billing_email() . "\r\n";
    }
    return $headers;
}, 10, 3 );

Шаг 3 — проверьте, какие письма включены

В том же разделе WooCommerce → Настройки → Письма каждое уведомление включается отдельно, и часть из них выключена по умолчанию:

ПисьмоКомуКогда отправляется
Новый заказАдминистраторуЗаказ оформлен
Заказ в обработкеПокупателюОплата получена
Заказ выполненПокупателюСтатус изменён на «выполнен»
Возврат средствПокупателюОформлен возврат
Счёт покупателюПокупателюОтправляется вручную из карточки заказа
Сброс пароля, новый аккаунтПокупателюДействия с учётной записью

Проверка и повторная отправка

Оформите тестовый заказ, а не полагайтесь на кнопку проверки в SMTP-плагине — она подтверждает только соединение, но не то, что срабатывают триггеры WooCommerce. Повторно отправить письмо можно из блока «Действия заказа» в карточке заказа или через WP-CLI:

bash
# Повторно отправить письмо «Заказ в обработке» по одному заказу
wp eval "WC()->mailer()->emails['WC_Email_Customer_Processing_Order']->trigger( 4417 );"

# Показать все зарегистрированные классы писем WooCommerce
wp eval "print_r( array_keys( WC()->mailer()->emails ) );"

Разбор ошибок

СимптомПричина и решение
Писем WooCommerce нет совсем SMTP не настроен. Настройте его на уровне WordPress.
Админ получает «Новый заказ», покупатель — ничего Письма покупателю выключены либо заказ остался в статусе «ожидание оплаты».
«Заказ выполнен» не отправляется никогда Шлюз оставляет заказы «в обработке». Завершайте их или включите письмо об обработке.
Письма попадают в спам Адрес отправителя не на подтверждённом домене.
Письма приходят с задержкой в несколько минут WooCommerce откладывает отправку в WP-Cron. На малопосещаемом магазине запускайте cron из планировщика ОС.
Письма дублируются Активны два SMTP-плагина либо плагин статусов повторно вызывает триггер.

Частые вопросы

Почему WooCommerce не отправляет письма о заказах?

WooCommerce отправляет через wp_mail() WordPress, а та по умолчанию передаёт письмо функции PHP mail(). На большинстве хостингов почтового сервера за ней нет, и письмо молча пропадает. Настройка SMTP решает это и для WooCommerce, и для всех остальных уведомлений WordPress сразу.

Почему часть писем WooCommerce приходит, а часть нет?

Загляните в WooCommerce → Настройки → Письма: каждое уведомление включается отдельно, и некоторые выключены по умолчанию. Кроме того, письмо «Заказ выполнен» отправляется только когда заказ действительно переходит в этот статус — если платёжный шлюз оставляет заказы «в обработке», оно не сработает никогда.

Какой адрес отправителя указывать в WooCommerce?

Адрес на домене, который вы подтвердили для отправки, например orders@mail.example.ru. Адрес на Яндексе, Mail.ru или Gmail не позволяет DKIM и SPF сойтись с доменом отправителя, DMARC не проходит, и подтверждения заказов попадают в спам.

Почему письма WooCommerce попадают в спам?

Почти всегда из-за несоответствия отправителя. Если в настройках магазина стоит адрес бесплатной почты или сайт отправляет неавторизованно через PHP mail(), принимающие серверы считают письмо поддельным. Отправка через релей с авторизацией от своего подтверждённого домена обычно снимает проблему в течение суток.

Как повторно отправить письмо по заказу?

Откройте заказ в админке и используйте блок «Действия заказа» — там перечислены письма, которые можно отправить повторно. Из командной строки то же самое делает WC()->mailer()->emails['WC_Email_Customer_Processing_Order']->trigger( $order_id ).

Нужен ли для WooCommerce отдельный SMTP-плагин?

Нет. У WooCommerce нет своего транспорта — он вызывает wp_mail(). Любой SMTP-плагин WordPress или небольшой обработчик phpmailer_init автоматически покрывает и WooCommerce.

Что дальше