Отправка и провайдеры¶
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» и перечисляет, что обновить. Отправка в любом случае работает.
Настройка¶
- Откройте Settings Mailroom, затем вкладку Providers и найдите карточку своего провайдера.
- Нажмите Generate a secret. Карточка показывает Webhook URL в форме
https://www.example.com/newsletter/webhook/{provider}/{secret}. - Если у карточки есть кнопка Set up in для вашего провайдера, нажмите её: webhook создаётся через API провайдера с ключом, уже находящимся в настройках его транспортного плагина. Иначе нажмите Copy the URL, откройте How to set this up и создайте webhook в панели провайдера, как там сказано, с указанными событиями.
- Если провайдер подписывает свои 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»). См. Устранение неполадок.