Как письмо попадает в MTA

submission interfaces
Шесть дверей, и пять из них требуют кода на стороне подающего

Руководство перечисляет шесть способов подать письмо: расширенный SMTP, четыре языковые обвязки (C/C++, .NET, Perl, Java) и каталог подачи, за которым узел следит на диске.

Перечисляет — и не описывает. Обвязкам отведена своя глава, каталог подачи живёт среди продвинутых возможностей. На этом уровне важна форма списка, а не подробности.

А форма такая: всё, кроме SMTP, требует чего-то на стороне подающего. Обвязка — это библиотека, которую надо установить и вызвать из кода; каталог подачи — согласие класть файлы туда, куда смотрит узел. SMTP не требует ничего: почтовый клиент есть в любой платформе.

Отсюда и выбор для площадок. Каждая рассылочная система, которую подключает Хаб, приходит через одну из этих дверей, и в подавляющем большинстве это SMTP — просто потому, что она умеет его без доработки.

Главная ловушка — выбирать обвязку ради скорости. Руководство прямо говорит, что обвязки не быстрее обычного соединения, кроме случая слияния с несколькими получателями на письмо. Всё остальное, что они дают, — персонализация и управление отдельным письмом — доступно и по SMTP управляющими заголовками. То есть новая зависимость в подающей системе покупает то, что и так есть.
Что делает Хаб. Использует только SMTP — и сам, и через площадки. Прогревочный отправитель открывает почтовую сессию на порт подачи, авторизуется общим логином и называет адрес отправки заголовком X-Virtual-MTA.

Это осознанно: SMTP умеют все, а обвязка потребовала бы правки в каждой подключаемой площадке. Управляющие заголовки закрывают то, ради чего обвязку и берут, — прежде всего выбор адреса отправки. Заголовок задания X-Job в источниках подачи с логином Хаб, наоборот, выключает (process-x-job false): метку задания не ставит ни прогрев, ни площадка.

Каталог подачи мы тоже не используем. Он был бы удобен там, где письма кладёт сторонняя система без сети до узла, но у нас такой схемы нет.

Рекомендуемые значения

Чем подавать и почему:

Способ Что требует от подающего Когда брать
SMTP ничего — умеет любая платформа наш выбор, и почти всегда правильный
обвязка установить библиотеку и писать код только ради слияния с многими получателями
каталог подачи класть файлы туда, куда смотрит узел когда сети до узла нет, а диск общий

Решения подачи одинаковы для всех дверей. Адрес отправки, задание, кодировку выбирает подающая сторона, каким бы способом она ни подавала (submission-model). Меняется форма выражения, а не набор решений.

Каталог подачи — единственный способ без сети. Это его настоящее преимущество, а не удобство.

Таблица выбора и оценка «наш выбор» наши. Из руководства здесь сам список шести способов и то, что подробности вынесены в другие главы.
Пример в конфигурации
# подача по SMTP: то же решение, что дала бы обвязка
X-Virtual-MTA: mta-news-1X-Job: campaign-4417
Выделенная строка выбирает адрес отправки для письма — то же самое, что в обвязке делается вызовом. Никакой библиотеки для этого не нужно.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.
▲

Типичные ошибки и проблемы

что делают не так и чем это кончается3 ошибки▶

Берут обвязку ради скорости

§ 1.3

Чем чреватоРуководство говорит прямо: быстрее обычного соединения обвязки не работают, кроме слияния с несколькими получателями на письмо. Новая зависимость в подающей системе покупает то, что доступно и по SMTP управляющими заголовками.
Как заметитьПереход на обвязку не изменил скорость, зато добавил библиотеку в сборку.
Как правильноОставаться на SMTP. К обвязке идти только ради слияния, и только если оно действительно нужно.

Ждут от каталога подачи надёжности

§ 1.3

Чем чреватоФайл, положенный в каталог, никто не подтверждает: подающая сторона не узнаёт, принял его узел или нет. У SMTP на это есть ответ сервера, у обвязки — исключение.
Как заметитьЧасть писем не ушла, и подающая система об этом не знает.
Как правильноБрать каталог подачи только там, где сети до узла нет вовсе, и строить проверку доставки отдельно.

Считают, что способ подачи меняет набор решений

§ 7

Чем чреватоНе меняет. Адрес отправки, задание, кодировку выбирает подающая сторона при любом способе — различается лишь форма: вызов, заголовок или поле файла.
Как заметитьПереход с одной двери на другую сопровождается поиском «а где здесь выбрать адрес отправки».
Как правильноЧитать набор решений один раз — он общий — и искать только форму записи для выбранного способа.
Совместимость
PowerMTA 6.0
описана в руководстве этой версии · платформа: любая
С какой версии директива доступна, вендор указывает не для всех — здесь пометки нет. Имя встречается и в издании руководства 5.0.
Наследование
Наследования у списка нет — это перечень дверей. Наследуются настройки блока подачи, который решает, что подающей стороне разрешено: слушаться ли заголовка выбора адреса, применять ли слияние, требовать ли авторизацию. Правила слияния источников там обычные: узкий блок перекрывает широкий.
Как проверить на узле
Какими дверями письма приходят на самом деле, видно по учёту:
grep -o ',smtp,\|,api,' /var/log/pmta/acct-*.csv | sort | uniq -c
pmta show status
Первая посчитает записи по способу подачи: если в парке всё идёт по SMTP, других значений там не встретится. Вторая покажет открытые входящие соединения — по ним видно, кто подаёт прямо сейчас.
В Хабе
Цена ошибки
безопасно: неверное значение ничего не ломает
Сценарии
Подключить платформу отправки