Подтверждения заказов, чеки об оплате, уведомления об отправке и восстановление пароля — письма, которые магазин не может себе позволить потерять. Все они уходят через wp_mail() WordPress, а та по умолчанию ведёт в никуда. Ниже — как направить их в fmailer и настроить отправителя так, чтобы письма проходили DMARC.
У WooCommerce нет собственного почтового транспорта: всё идёт через wp_mail(), поэтому магазин наследует поведение WordPress — передать письмо функции PHP mail(), за которой на большинстве современных хостингов нет почтового сервера. Заказ оформляется, покупатель видит страницу «спасибо», подтверждение не приходит.
Там, где локальный сервер всё-таки есть, письмо уходит без подписи и с IP-адреса, которого нет в вашей записи SPF, — а неавторизованный чек из магазина выглядит ровно как фишинг, поэтому попадает в спам.
Поскольку WooCommerce использует wp_mail(), достаточно настроить SMTP один раз на уровне WordPress — это покроет весь магазин. Следуйте инструкции по WordPress : подойдёт WP Mail SMTP, FluentSMTP или обработчик phpmailer_init без плагина. Отдельного плагина для WooCommerce не существует и не требуется.
| Параметр | Значение |
|---|---|
| SMTP-хост | smtp.fmailer.ru |
| Порт | 587 |
| Шифрование | STARTTLS (соединение переводится в TLS до авторизации) |
| Логин | Логин SMTP-токена вашего домена |
| Пароль | Пароль этого токена — показывается один раз, при создании |
Откройте WooCommerce → Настройки → Письма и укажите в поле Адрес «От» адрес на подтверждённом домене — например orders@mail.example.ru. Именно эта настройка определяет, пройдут ли ваши чеки проверку DMARC.
From: на чужом домене с ними не сходится, DMARC не проходит, и подтверждения заказов фильтруются — те самые письма, о пропаже которых покупатели жалуются чаще всего. Если тема или сторонний плагин перебивают отправителя, зафиксируйте его:
/**
* Жёстко задать отправителя для всех писем WooCommerce,
* что бы ни стояло в настройках магазина и сторонних плагинах.
*/
add_filter( 'woocommerce_email_from_address', fn() => 'orders@mail.example.ru', 99 );
add_filter( 'woocommerce_email_from_name', fn() => 'Магазин', 99 ); Чтобы сотрудники отвечали прямо покупателю, но From: оставался согласованным, задайте Reply-To:
// 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 );В том же разделе WooCommerce → Настройки → Письма каждое уведомление включается отдельно, и часть из них выключена по умолчанию:
| Письмо | Кому | Когда отправляется |
|---|---|---|
| Новый заказ | Администратору | Заказ оформлен |
| Заказ в обработке | Покупателю | Оплата получена |
| Заказ выполнен | Покупателю | Статус изменён на «выполнен» |
| Возврат средств | Покупателю | Оформлен возврат |
| Счёт покупателю | Покупателю | Отправляется вручную из карточки заказа |
| Сброс пароля, новый аккаунт | Покупателю | Действия с учётной записью |
Оформите тестовый заказ, а не полагайтесь на кнопку проверки в SMTP-плагине — она подтверждает только соединение, но не то, что срабатывают триггеры WooCommerce. Повторно отправить письмо можно из блока «Действия заказа» в карточке заказа или через WP-CLI:
# Повторно отправить письмо «Заказ в обработке» по одному заказу
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 отправляет через wp_mail() WordPress, а та по умолчанию передаёт письмо функции PHP mail(). На большинстве хостингов почтового сервера за ней нет, и письмо молча пропадает. Настройка SMTP решает это и для WooCommerce, и для всех остальных уведомлений WordPress сразу.
Загляните в WooCommerce → Настройки → Письма: каждое уведомление включается отдельно, и некоторые выключены по умолчанию. Кроме того, письмо «Заказ выполнен» отправляется только когда заказ действительно переходит в этот статус — если платёжный шлюз оставляет заказы «в обработке», оно не сработает никогда.
Адрес на домене, который вы подтвердили для отправки, например orders@mail.example.ru. Адрес на Яндексе, Mail.ru или Gmail не позволяет DKIM и SPF сойтись с доменом отправителя, DMARC не проходит, и подтверждения заказов попадают в спам.
Почти всегда из-за несоответствия отправителя. Если в настройках магазина стоит адрес бесплатной почты или сайт отправляет неавторизованно через PHP mail(), принимающие серверы считают письмо поддельным. Отправка через релей с авторизацией от своего подтверждённого домена обычно снимает проблему в течение суток.
Откройте заказ в админке и используйте блок «Действия заказа» — там перечислены письма, которые можно отправить повторно. Из командной строки то же самое делает WC()->mailer()->emails['WC_Email_Customer_Processing_Order']->trigger( $order_id ).
Нет. У WooCommerce нет своего транспорта — он вызывает wp_mail(). Любой SMTP-плагин WordPress или небольшой обработчик phpmailer_init автоматически покрывает и WooCommerce.