Перейти к содержанию

Отправка и провайдеры

Mailroom сам не общается с почтовым сервером. Каждая кампания, письмо подтверждения и письмо автоматизации передаётся плагину Email для Grav, который отправляет их через тот транспорт, который вы ему дали: SMTP или транспортный плагин провайдера, например SMTP2GO, Amazon SES, SendGrid, Postmark, Mailgun, MailerSend или Resend. Эта страница описывает вкладки Sending и Providers в настройках Mailroom.

Может ли этот сайт отправлять почту?

Карточка вверху вкладки Sending читает плагин Email и сообщает:

  • установлен ли он и отправляет ли письма («The Email plugin is configured and sending.»), и какой Engine использует;
  • доходят ли Unsubscribe headers для отписки одним щелчком до этого транспорта. Доходят в большинстве случаев; транспорт, отбрасывающий собственные заголовки, лишает Gmail кнопки Unsubscribe, и карточка говорит об этом.

Под скоростью отправки карточка The queue worker говорит, когда обработчик запускался последний раз. Кампания — одно задание в очереди Mailroom, поэтому ничего не уходит, если обработчик не запущен (см. Задания и cron).

От кого приходит почта

Настройка Название Что делает
from_name From Name Имя, от которого отправляются кампании. Пусто использует имя плагина Email.
from_email From Address Адрес, с которого отправляются кампании. Пусто отправляет с адреса From плагина Email.

В любом случае это должен быть адрес, с которого ваш почтовый провайдер разрешает отправлять. Баннер «no From address», предупреждение status и проверка Health появляются, только когда адреса нет ни у Mailroom, ни у плагина Email.

Кампания может переопределить оба и добавить Reply-to в редакторе кампании (см. Кампании). Список также может нести своё имя и адрес From, заданные через API (from_name и from_email у списка, см. REST API); страница списка показывает это как Sends as.

Как быстро отправляет сайт

Настройка Название По умолчанию Что делает
sending.per_minute Messages Per Minute 60 Наибольшее число сообщений, которое сайт отправляет за минуту, по всем кампаниям сразу. Задайте то, с чем спокойно справляется ваш почтовый провайдер.
sending.batch Recipients Per Run 50 Сколько людей один запуск задания отправки берёт на себя, прежде чем вернуть управление обработчику. Меньшее значение означает, что пауза срабатывает быстрее.
sending.abort_after_failures Stop After Consecutive Failures 25 Предохранитель. После стольких отказов отправки подряд кампания останавливается сама; одна успешная отправка сбрасывает счётчик.

Кампания, остановившая себя, показывает состояние Stopped и баннер на панели управления («The campaign ... stopped itself»). Исправьте настройки почты и нажмите Resume: никто из уже получивших её не получит письмо дважды.

Проверка Sending rate на экране Health предупреждает, когда скорость равна нулю (читается как одно сообщение в минуту) или выше того, что справляется один обработчик Grav и большинство тарифов провайдеров.

Что отправляет Mailroom

Три переключателя в What Mailroom Sends, каждый включён по умолчанию. Выключение останавливает этот вид сообщений, не трогая остальное.

Настройка Название Что покрывает
messages.confirmation Confirmation Emails Письмо двойного подтверждения подписки. Выключено — никто новый не сможет подтвердить подписку.
messages.campaign Campaigns Каждую кампанию. Более тяжёлый выключатель, чем пауза одной кампании.
messages.flow_email Automation Emails Письма, которые отправляют автоматизации, отдельно от кампаний.

Заголовки в почте кампаний и автоматизаций

Каждая кампания и каждое письмо автоматизации несут:

  • List-Unsubscribe с формой mailto: вашего адреса From и HTTPS-ссылкой отписки, а также List-Unsubscribe-Post: List-Unsubscribe=One-Click. Вместе они ставят собственную кнопку Unsubscribe почтового клиента рядом с вашим именем (см. Отписку и предпочтения).
  • Precedence: bulk.
  • Собственный Message-ID и X-Mailroom-Campaign с id кампании.
  • X-Grav-Send-Id, по которому webhook провайдера сопоставляет событие с сообщением, о котором оно.

Каждое сообщение, которое Mailroom передаёт плагину Email, также записывается в собственный журнал сообщений Mailroom (кто, что, когда, первое открытие и возврат), а задание, выполненное дважды, никогда не отправляет одно сообщение дважды. Журнал хранится Keep the Message Log For (mail_log.retain_days, 180 дней).

Webhook провайдеров

Провайдер может сообщить вашему сайту, что произошло с каждым сообщением: доставлено, возврат, отмечено как спам. Без этого Mailroom знает, что он передал, и что ваши читатели открыли и по чему перешли, но не что дошло. На вкладке Providers есть карточка для каждого транспортного плагина на сайте, который умеет сообщать о доставке.

Примечание

Карточкам провайдеров нужна поддержка провайдера в плагине Email и актуальный транспортный плагин для сервиса, через который вы отправляете. Без них вкладка говорит «No transport plugin on this site can report deliveries» и перечисляет, что обновить. Отправка в любом случае работает.

Настройка

  1. Откройте Settings Mailroom, затем вкладку Providers и найдите карточку своего провайдера.
  2. Нажмите Generate a secret. Карточка показывает Webhook URL в форме https://www.example.com/newsletter/webhook/{provider}/{secret}.
  3. Если у карточки есть кнопка Set up in для вашего провайдера, нажмите её: webhook создаётся через API провайдера с ключом, уже находящимся в настройках его транспортного плагина. Иначе нажмите Copy the URL, откройте How to set this up и создайте webhook в панели провайдера, как там сказано, с указанными событиями.
  4. Если провайдер подписывает свои webhook, карточке нужен ключ подписи в настройках этого транспортного плагина. Пока его нет, карточка читается Needs a key, и каждое событие будет отклонено.

У каждой карточки есть состояние: Ready (секрет задан и всё, чем подписывает провайдер, присутствует), Needs a key или Not set up. Она также говорит, Signed ли события или «Not signed, so the secret in the URL is what protects it», и когда пришло последнее событие.

Предупреждение

Generate a new secret меняет URL. Webhook, уже зарегистрированный у провайдера, после этого отправляет на адрес, отвечающий 404, и его события теряются, пока вы не вставите новый URL (или не нажмёте Set up again in).

SMTP2GO

SMTP2GO ничего не подписывает, поэтому секрет в URL — вся его защита. Если вы добавляете заголовок Authorization в webhook в панели SMTP2GO, вставьте то же полное значение заголовка в providers.smtp2go.auth_header в user/config/plugins/mailroom.yaml (только YAML), и Mailroom будет проверять его при каждом событии.

Что отвечает webhook

Статус Когда
200 Событие прочитано и записано, либо полезную нагрузку вообще не удалось прочитать (записывается с первыми 500 байтами и отвечает 200, чтобы провайдер не повторял её днями). Запрос HEAD тоже получает 200.
401 Подпись не сошлась с ключом в настройках транспортного плагина. Не более одной строки журнала в минуту.
404 Ни один транспортный плагин не отвечает за этого провайдера, он не умеет сообщать о доставке или секрет неверен. Все три случая выглядят одинаково намеренно.
405 GET, например URL, вставленный в браузер.
429 Больше Webhook Requests Per Hour (rate_limits.webhook, 6000) с одного адреса.

Что делает каждое событие

Событие Отправка Подписчик
Delivered Отмечена доставленной Ничего
Hard bounce Отмечена возвратом Состояние Bounced, убран из всех списков, адрес исключён как жёсткий возврат
Soft bounce Отмечена возвратом Считается: три мягких возврата за тридцать дней считаются одним жёстким
Refused (провайдер не стал отправлять сообщение, например из-за квоты) Отмечена возвратом Ничего, поскольку об адресе ничего не сказано
Complaint (кнопка спама) Отмечена жалобой Состояние Complained, убран из всех списков, адрес исключён
Open, click Заполняется там, где не сработали собственный пиксель или редирект Mailroom Ничего

У каждого события есть собственный ключ, поэтому webhook, отправленный провайдером снова, записывается один раз, а один временный сбой, доставленный трижды, никогда не становится тремя мягкими возвратами. То, что провайдер сказал о сообщении, хранится с хешем адреса и без самого адреса.

Чтобы увидеть, что сделала бы сохранённая полезная нагрузка, воспроизведите её:

bin/plugin mailroom webhook:replay mailgun payload.json          # показать, что будет сделано
bin/plugin mailroom webhook:replay mailgun payload.json --apply  # выполнить

См. CLI.

Когда всё замолкает

Проверка Bounce webhook на экране Health и баннер на панели управления говорят, когда webhook настроен и кампании ушли, но события не приходили днями, а также когда что-то отправляет на webhook провайдера, у которого ещё нет секрета («Something is posting to the ... webhook»). См. Устранение неполадок.