Как отправлять массовые рассылки из WordPress с помощью Yandex Cloud Postbox
Это практическое руководство по настройке отправки писем с сайта на WordPress через связку: Такая схема подходит для транзакционных писем, уведомлений сайта и маркетинговых рассылок. Она не отменяет лимиты почтового провайдера, но помогает сделать отправку более управляемой и снизить риск блокировок, перегрузки SMTP и потери писем. Общая схема работы Базовая схема без очереди: Схема с очередью…
Это практическое руководство по настройке отправки писем с сайта на WordPress через связку:
- FluentCRM;
- FluentSMTP;
- Yandex Cloud Postbox;
- DNS-записи домена;
- WP Mail Queue, если нужна очередь для массовых рассылок.
Такая схема подходит для транзакционных писем, уведомлений сайта и маркетинговых рассылок. Она не отменяет лимиты почтового провайдера, но помогает сделать отправку более управляемой и снизить риск блокировок, перегрузки SMTP и потери писем.
Общая схема работы
Базовая схема без очереди:
WordPress / FluentCRM
↓
FluentSMTP
↓
Yandex Cloud Postbox
↓
Получатель Схема с очередью для массовых рассылок:
WordPress / FluentCRM
↓
WP Mail Queue
↓
WP Cron
↓
FluentSMTP
↓
Yandex Cloud Postbox
↓
Получатель Важный момент: если используется WP Mail Queue, очередь должна перехватывать письма до FluentSMTP. Иначе письма могут уходить сразу через SMTP, минуя очередь.
1. Yandex Cloud Postbox
1.1 Создание адреса
В Yandex Cloud нужно открыть сервис Cloud Postbox и создать адрес для домена.
Пример домена:
webmarketing-lab.ru При создании адреса выбирается DKIM-подпись. Для обычной настройки удобнее использовать EASY DKIM: Yandex Cloud сам создаст нужные DKIM-записи, которые останется добавить в DNS.
После создания адреса Cloud Postbox покажет CNAME-записи для DKIM. Их нужно скопировать и добавить в DNS домена.
1.2 API-ключ для SMTP
Для подключения Cloud Postbox к FluentSMTP используется не статический ключ доступа, а API-ключ.
Нужно:
- Создать сервисный аккаунт в Yandex Cloud.
- Назначить ему роль:
postbox.sender - Создать API-ключ с областью действия:
yc.postbox.send - Сохранить:
ID API-ключа
секретную часть API-ключа Именно эти данные используются в FluentSMTP:
SMTP Username: ID API-ключа
SMTP Password: секретная часть API-ключа Статический ключ доступа нужен для других сценариев, например для API/AWS CLI-совместимых запросов, но не для подключения через FluentSMTP по SMTP.
1.3 Квоты Cloud Postbox
По умолчанию у Cloud Postbox небольшие лимиты:
200 писем в сутки
1 письмо в секунду Для реальных рассылок нужно заранее запросить увеличение квот в Yandex Cloud.
Важно: увеличение квот не означает, что можно сразу отправлять большие объёмы на холодный домен. Для маркетинговых рассылок всё равно важны качество базы, прогрев домена, SPF, DKIM, DMARC и низкий процент жалоб.
2. DNS-записи домена
DNS-записи нужно добавлять там, где реально управляется DNS-зона домена.
В рассматриваемом примере DNS-зона домена webmarketing-lab.ru управляется в Beget.
2.1 Основная A-запись
Для сайта:
webmarketing-lab.ru. A 87.236.16.31
www.webmarketing-lab.ru. A 87.236.16.31 2.2 MX-запись
Если входящая почта домена обслуживается Яндексом, MX-запись выглядит так:
webmarketing-lab.ru. MX 10 mx.yandex.net. Это отвечает за получение писем на адреса вида:
name@webmarketing-lab.ru 2.3 SPF
SPF-запись должна быть одна на домен. Нельзя создавать несколько разных TXT-записей, начинающихся с v=spf1.
Текущая рабочая SPF-запись:
v=spf1 include:_spf.yandex.net include:beget.com include:_spf.pstbx.ru ~all Что здесь означает каждый include:
include:_spf.yandex.net Нужен, если обычная почта домена отправляется через Яндекс.
include:_spf.pstbx.ru Нужен для отправки через Yandex Cloud Postbox.
include:beget.com Нужен только если сайт или сервер могут отправлять письма через инфраструктуру Beget.
Если через Beget письма не отправляются, этот include можно проверить отдельно и при необходимости убрать. Но если сайт использует PHP mail, системные письма хостинга или старые настройки Beget, лучше не удалять его без проверки.
2.4 DKIM для Yandex Cloud Postbox
Для Cloud Postbox добавлены две CNAME-записи DKIM:
egt2luerb9ajgbko9ee1-1._domainkey.webmarketing-lab.ru.
CNAME egt2luerb9ajgbko9ee1-1.dkim.pstbx.ru.
egt2luerb9ajgbko9ee1-2._domainkey.webmarketing-lab.ru.
CNAME egt2luerb9ajgbko9ee1-2.dkim.pstbx.ru. Эти записи нужны именно для Postbox.
2.5 DKIM для обычной Яндекс Почты
Также может быть отдельная DKIM-запись:
mail._domainkey.webmarketing-lab.ru. TXT v=DKIM1; ... Её не нужно удалять, если она относится к обычной почте домена. Она не конфликтует с DKIM Postbox, потому что использует другой селектор:
mail._domainkey А Postbox использует свои селекторы:
egt2luerb9ajgbko9ee1-1._domainkey
egt2luerb9ajgbko9ee1-2._domainkey 2.6 DMARC
Текущая DMARC-запись:
_dmarc.webmarketing-lab.ru. TXT v=DMARC1; p=none; Для старта это нормально. Политика p=none ничего не блокирует, но позволяет проверять, как проходят SPF и DKIM.
После стабильной работы отправки можно переходить к более строгой политике:
v=DMARC1; p=quarantine; или:
v=DMARC1; p=reject; Но делать это стоит только после проверки, что все легальные источники отправки проходят SPF/DKIM.
3. FluentSMTP
3.1 Установка
В WordPress:
Плагины → Добавить новый → FluentSMTP После установки нужно создать новое SMTP-подключение.
3.2 Реальные настройки подключения
В FluentSMTP используется провайдер:
SMTP-сервер / Other SMTP Настройки:
From Email: av@webmarketing-lab.ru
From Name: Александр Лаврищев
SMTP Host: postbox.cloud.yandex.net
SMTP Port: 465
Encryption: SSL
Authentication: Enabled
SMTP Username: ID API-ключа Yandex Cloud
SMTP Password: секретная часть API-ключа
Return-Path: включить, если доступно Пример из реальной настройки:
SMTP Host: postbox.cloud.yandex.net
SMTP Port: 465
Encryption: SSL
SMTP Username: ajekjubabbuuksnuhgh5 Пароль SMTP не публикуется. Это секретная часть API-ключа.
3.3 Важные условия
Адрес отправителя:
av@webmarketing-lab.ru должен относиться к подтверждённому домену:
webmarketing-lab.ru Иначе могут быть проблемы с авторизацией отправки или доставляемостью.
После сохранения подключения нужно отправить тестовое письмо из FluentSMTP и убедиться, что оно дошло.
4. FluentCRM
4.1 Настройки отправителя
Во FluentCRM нужно указать те же данные отправителя, что и в FluentSMTP:
From Email: av@webmarketing-lab.ru
From Name: Александр Лаврищев
Reply-To: av@webmarketing-lab.ru Это важно для согласованности отправки. Если в FluentCRM указан один домен, а в SMTP используется другой, доставляемость может ухудшиться.
4.2 Лимит скорости FluentCRM
Во FluentCRM есть настройка:
Maximum Emails Per Second Если используется только FluentCRM + FluentSMTP, этот лимит влияет на скорость отправки кампаний.
Если дополнительно используется WP Mail Queue и письма действительно попадают в очередь, главным ограничителем скорости становится уже Mail Queue.
В этом случае FluentCRM можно оставить на минимальном доступном значении, например:
4 emails per second Но фактическую отправку будет регулировать очередь.
4.3 Plain text версия письма
Для лучшей доставляемости у письма должна быть текстовая версия.
Если письмо отправляется только в HTML, тестировщики вроде mail-tester.com могут показывать замечание:
MIME_HTML_ONLY Это не критическая ошибка, но лучше добавить plain text.
Во FluentCRM при создании письма нужно проверить вкладку или блок:
Plain Text Если есть кнопка генерации из HTML, можно использовать её.
5. WP Mail Queue
WP Mail Queue нужен не всегда.
Без очереди схема такая:
FluentCRM
↓
FluentSMTP
↓
Yandex Cloud Postbox Для небольших объёмов этого может быть достаточно.
Очередь нужна, если:
- база больше 500 контактов;
- есть массовые рассылки;
- во время рассылки на сайте идут регистрации, покупки или уведомления;
- были таймауты или резкие скачки нагрузки;
- нужно иметь возможность поставить отправку на паузу;
- нужно видеть письма в очереди до отправки.
5.1 Базовые настройки Mail Queue
Пример:
Status: Enabled
Send max: 60 emails every 1 minute Это означает, что очередь будет отправлять до 60 писем за один минутный цикл cron.
Для больших баз иногда используют 100 писем за цикл, но это нужно согласовывать с лимитами SMTP-провайдера и возможностями сервера.
5.2 WP-Cron
Если используется Mail Queue, лучше отключить стандартный WP-Cron и настроить серверный cron.
В wp-config.php:
define( 'DISABLE_WP_CRON', true ); Команда для cron:
curl -s --resolve webmarketing-lab.ru:443:87.236.16.31 https://webmarketing-lab.ru/wp-cron.php?doing_wp_cron > /dev/null 2>&1 Здесь:
webmarketing-lab.ru— домен сайта;443— HTTPS-порт;87.236.16.31— IP сайта;wp-cron.php?doing_wp_cron— запуск WordPress cron.
Для массовых рассылок cron желательно запускать каждую минуту.
Если cron запускается раз в 5 минут, фактическая скорость отправки будет ниже и расчёт 60 писем в минуту уже не будет точным.
5.3 Важная проверка Mail Queue
Главный тест:
1. Перевести Mail Queue в режим Paused.
2. Отправить тестовую кампанию FluentCRM на 1 адрес.
3. Открыть Mail Queue → Queue. Если письмо появилось в очереди со статусом:
queue и не пришло получателю, значит Mail Queue перехватывает отправку.
Если письмо сразу пришло получателю, а очередь пустая, значит Mail Queue не участвует в отправке этой кампании.
5.4 Сниппет при конфликте Mail Queue и FluentSMTP
На практике может возникнуть ситуация:
- FluentSMTP включён;
- Mail Queue включён;
- тестовые системные письма попадают в очередь;
- кампании FluentCRM не попадают в очередь или уходят слишком быстро.
В таком случае проблема может выглядеть как конфликт порядка выполнения обработчиков Mail Queue и FluentSMTP.
Практическое решение — поднять приоритет обработчика Mail Queue, чтобы он перехватывал письма раньше SMTP-обработки.
Сниппет:
add_action('plugins_loaded', function () {
global $wdm_wpma_options;
global $wdm_wpma_pre_wp_mail_priority;
if (
empty($wdm_wpma_options['enabled']) ||
!in_array($wdm_wpma_options['enabled'], ['1', 'paused'], true) ||
wp_doing_cron() ||
!function_exists('wdm_wpma_prewpmail')
) {
return;
}
remove_filter(
'pre_wp_mail',
'wdm_wpma_prewpmail',
$wdm_wpma_pre_wp_mail_priority
);
$wdm_wpma_pre_wp_mail_priority = 1;
add_filter(
'pre_wp_mail',
'wdm_wpma_prewpmail',
$wdm_wpma_pre_wp_mail_priority,
2
);
}, 999); В WPCodeBox для PHP-сниппетов открывающий тег <?php не используется. В других менеджерах сниппетов правила могут отличаться.
После установки сниппета нужно снова выполнить тест с режимом Paused.
6. Bounce, жалобы и возвраты
Cloud Postbox умеет работать с событиями доставки, недоставки, жалоб и отписок, но готовой штатной интеграции Cloud Postbox с Bounce Handler во FluentCRM может не быть.
Поэтому есть два варианта.
Вариант A. Ручная обработка
Подходит для небольших баз.
Можно:
- Создать отдельную папку для возвратов.
- Настроить правило в почте для писем от mailer-daemon и похожих адресов.
- Раз в неделю проверять возвраты.
- Нерабочие адреса вручную помечать во FluentCRM как bounced/unsubscribed.
Для маленьких баз это может быть достаточно.
Вариант B. Автоматизация
Для больших баз лучше использовать:
- SMTP/email-сервис, который FluentCRM поддерживает в Bounce Handler напрямую;
- отдельную webhook-интеграцию для событий Cloud Postbox;
- промежуточный сервис обработки bounce-событий.
Если база 1000+ и рассылки регулярные, ручная обработка постепенно становится неудобной.
7. Проверка доставляемости
7.1 Mail-tester
Для проверки можно использовать mail-tester.com.
Порядок:
1. Открыть mail-tester.com.
2. Скопировать тестовый адрес.
3. Отправить письмо из FluentCRM.
4. Проверить результат. Хороший ориентир:
9.0/10 и выше Типовые результаты:
SPF_PASS — SPF работает
DKIM_VALID — DKIM работает
MIME_HTML_ONLY — нужно добавить plain text версию 7.2 Статистика Cloud Postbox
В Yandex Cloud Postbox нужно смотреть:
- количество отправленных писем;
- доставленные письма;
- недоставленные письма;
- ошибки;
- жалобы, если они доступны в статистике или уведомлениях.
Если процент доставки заметно ниже ожидаемого, нужно проверять:
- SPF;
- DKIM;
- DMARC;
- качество базы;
- тему и содержание письма;
- наличие ссылки отписки;
- частоту отправки.
8. Расчёт скорости отправки
Если Mail Queue настроен так:
60 писем каждую 1 минуту теоретическое время отправки будет примерно таким:
| Размер базы | Примерное время |
|---|---|
| 300 писем | 5 минут |
| 1000 писем | 17 минут |
| 5000 писем | 1 час 23 минуты |
| 10000 писем | 2 часа 47 минут |
| 15000 писем | 4 часа 10 минут |
| 20000 писем | 5 часов 33 минуты |
Эти расчёты предполагают, что:
- cron запускается каждую минуту;
- SMTP не вводит дополнительных ограничений;
- сервер успевает обработать очередь;
- Mail Queue действительно отправляет заданное количество писем за цикл.
Если Cloud Postbox разрешает меньше писем в сутки или в секунду, лимит Mail Queue нужно снизить.
Например, если разрешено 1000 писем в час:
1000 / 60 = 16 писем в минуту Тогда разумный лимит Mail Queue:
10-15 писем в минуту 9. Итоговый чек-лист
Перед запуском рассылки нужно проверить:
- домен
webmarketing-lab.ruподтверждён в Yandex Cloud Postbox; - DKIM CNAME-записи Postbox добавлены;
- SPF содержит
include:_spf.pstbx.ru; - SPF-запись одна на домен;
- DMARC-запись существует;
- FluentSMTP использует хост
postbox.cloud.yandex.net; - порт SMTP —
465; - шифрование —
SSL; - username — ID API-ключа;
- password — секретная часть API-ключа;
- From Email —
av@webmarketing-lab.ru; - FluentCRM использует тот же From Email;
- тестовое письмо из FluentSMTP доходит;
- тестовое письмо из FluentCRM доходит;
- plain text версия письма добавлена;
- mail-tester показывает 9.0/10 или выше;
- если используется Mail Queue, cron работает каждую минуту;
- если используется Mail Queue, тест в режиме
Pausedпройден; - лимит отправки соответствует квотам Cloud Postbox.
Итог
Рабочая базовая схема:
FluentCRM
↓
FluentSMTP
↓
Yandex Cloud Postbox
↓
Получатель Рабочая схема для массовых рассылок с очередью:
FluentCRM
↓
WP Mail Queue
↓
WP Cron
↓
FluentSMTP
↓
Yandex Cloud Postbox
↓
Получатель В текущей реальной конфигурации ключевые настройки выглядят корректно:
SMTP Host: postbox.cloud.yandex.net
SMTP Port: 465
Encryption: SSL
From Email: av@webmarketing-lab.ru
SPF: include:_spf.yandex.net include:beget.com include:_spf.pstbx.ru
DKIM Postbox: две CNAME-записи на dkim.pstbx.ru
DMARC: v=DMARC1; p=none; Главное — не путать базовую SMTP-отправку и очередь. FluentSMTP отвечает за то, как письмо отправляется через SMTP. WP Mail Queue отвечает за то, когда письмо будет отправлено. Для больших рассылок эти две части должны работать вместе, но Mail Queue должен стоять в цепочке до FluentSMTP.
В статье использованы рекомендации Виктора Левчука, создателя Memberlux, в частности, плагин Mail Queue и пример записи cron на сервере.
