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

Отправка почты из Mautic через SMTP

Mautic — система автоматизации маркетинга, поэтому отправляет он в основном массовые письма: рассылки по сегментам, шаги кампаний, новостные письма. С пятой версии Mautic работает через Symfony Mailer, и SMTP-релей настраивается строкой DSN на одном экране. Ниже — подключение к fmailer и три вещи, без которых массовая рассылка не работает даже при исправном соединении: отписка, отказы и темп.

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

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

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

Шаг 1 — настройки отправки

Откройте Settings (шестерёнка справа вверху) → Configuration → Email Settings. Интерфейс Mautic по умолчанию английский, поэтому названия полей приведены как есть. В блоке Mail Send Settings:

ПолеЗначение
Name to send mail asНазвание компании или команды
E-mail address to send mail fromnews@mail.example.ru — на подтверждённом домене
Reply to addressЯщик, который кто-то читает, если отправитель — не такой
Custom return path (bounce) addressОставьте пустым — см. раздел про отказы

Шаг 2 — Email DSN

ПолеЗначение
Schemesmtp
Hostsmtp.fmailer.ru
Port587
UserЛогин токена вашего домена
PasswordПароль этого токена
Path, OptionsОставьте пустыми

Нажмите Save, затем Send test email — письмо придёт на адрес вашего пользователя Mautic. Форма сама кодирует логин для URL; если правите файл вручную, замените @ на %40:

config/local.phpphp
<?php
// config/local.php — @ в логине записывается как %40
$parameters = array(
    // ...
    'mailer_from_name'  => 'Магазин',
    'mailer_from_email' => 'news@mail.example.ru',
    'mailer_dsn'        => 'smtp://token-login%40mail.example.ru:token-password@smtp.fmailer.ru:587',
);

Отписка

В маркетинговые письма Mautic сам добавляет List-Unsubscribe и заголовок отписки в одно нажатие List-Unsubscribe-Post. Если мы относим письмо к массовым, релей ставит на их место нашу пару заголовков, и отписка записывается в список отписавшихся домена, а не в Mautic. Следующие письма на этот адрес мы не доставляем, но в Mautic контакт остаётся подписанным, пока вы его не обновите, — ориентируйтесь на вебхукunsubscribed. Ссылка {unsubscribe_text} в теле письма по-прежнему ведёт в Mautic.

Отказы

Если в разделе Monitored Inbox Settings настроен ящик для отказов, Mautic ставит в конверт письма адрес возвратов с меткой (…+bounce_…@), а mautic:email:fetch читает вернувшиеся отказы.

⚠
Релей принимает конверт только с адресом на вашем домене, поэтому ящик для отказов на Яндексе или Gmail приводит к ошибке 550 from must be equal to … на каждом письме. И оставьте пустым return path домена в панели: он заменяет конверт, который выбрал Mautic, и метка, по которой Mautic сопоставляет отказы, теряется.

Отказ, который наши серверы получили при доставке, письмом не возвращается: он виден в журнале домена и приходит вебхуком bounced. Жёсткие отказы мы за вас не блокируем, поэтому помечайте такие контакты в Mautic как Do Not Contact — иначе следующая рассылка снова уйдёт на несуществующие адреса, и доля отказов вырастет.

Темп рассылки

Рассылки по сегментам отправляет cron, и скорость задаётся там же. За час должно уходить меньше часового лимита тарифа — сверх него релей отвечает 550 hourly limit exceeded. Прогрев нового домена ничего не отклоняет, а доставляет лишнее позже. Оба ограничения описаны на странице лимитов отправки.

crontabbash
# Рассылки по сегментам — не больше 500 контактов за запуск
*/15 * * * * php /var/www/mautic/bin/console mautic:broadcasts:send --limit=500

# Чтение ящика с отказами и запросами на отписку
*/10 * * * * php /var/www/mautic/bin/console mautic:email:fetch

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

СимптомПричина и решение
Connection could not be established Исходящий порт заблокирован — укажите Port 8587 или 8465 для шифрования с первого байта.
Failed to authenticate on SMTP server Неверный логин или пароль токена либо незакодированный @ в mailer_dsn, отредактированном вручную.
550 from must be equal to … Адрес отправителя или отслеживаемого ящика не на подтверждённом домене.
550 hourly limit exceededУменьшите --limit или запускайте cron реже.
Тестовое письмо уходит, рассылка — нет Не запущен cron mautic:broadcasts:send либо включена очередь, а воркера messenger:consume email нет.
Письма в спаме Адрес отправителя не на подтверждённом домене или база не очищена от отказов.

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

Где в Mautic настраивается SMTP?

Settings (шестерёнка справа вверху) → Configuration → Email Settings. Начиная с Mautic 5 подключение задаётся как Email DSN — поля Scheme, Host, Port, User, Password и Options, из которых Mautic собирает строку smtp://user:pass@host:port.

Нужно ли отдельно выбирать TLS или SSL?

Нет, шифрование определяется портом. Со схемой smtp порт 587 поднимает TLS через STARTTLS, а порт 465 шифруется с первого байта. Используйте 587, если хостинг его не блокирует.

Почему кнопка Send test email ничего не делает?

DSN проверяется только после сохранения — Mautic так и пишет: сохраните изменения, чтобы проверить DSN. Сначала сохраните настройки, потом отправляйте тест.

Добавляет ли Mautic заголовок List-Unsubscribe?

Да, в маркетинговые письма: List-Unsubscribe и List-Unsubscribe-Post Mautic ставит сам, в транзакционные — нет. Письма, которые мы относим к массовым, получают вместо них нашу пару заголовков, и отписка через неё записывается у нас — подробности ниже.

Как Mautic узнаёт об отказах?

Через отслеживаемый ящик. Mautic ставит свой адрес возвратов в конверт письма, сервер получателя присылает отказ туда, а mautic:email:fetch читает его и помечает контакт как Do Not Contact. Отказы, которые наши серверы получили при доставке, письмом не возвращаются — они в журнале домена и в вебхуке bounced.

Как уложить рассылку в лимиты тарифа?

Задайте темп mautic:broadcasts:send параметром --limit и частотой запуска в cron так, чтобы за час уходило меньше часового лимита. Сверх него релей отвечает 550 hourly limit exceeded, и письмо не отправляется, а не ждёт своей очереди.

Что дальше