type

<domain>нужен перезапуск

Чем эта очередь отдаёт письма — SMTP, файлом, программой, вебхуком или никак
в конфигурации это строкаtype smtpвнутри блока <domain>
Переключатель между пятью способами доставки

Решает, что очередь делает с письмом. Умолчание smtp — обычная отправка приёмнику. Остальные четыре превращают очередь в обработчик:

  • file — письмо пишется в файл; куда и в каком виде, задают file-destination и file-format;
  • pipe — на каждого получателя запускается программа из строки command, письмо подаётся ей на вход;
  • http-delivery — письмо уходит запросом POST по адресу из http-delivery-url в виде объекта JSON;
  • discard — письмо выбрасывается, а в учёт попадает запись; доставкой её считать или отказом, решает discard-as-bounce.

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

Главная ловушка — смена вида на непустой очереди. Руководство предупреждает отдельной строкой: если в очереди уже есть письма, смена вида требует перезапуска PowerMTA. После pmta reload конфигурация новая, а очередь работает по-старому, и заметить это можно только по выводу настроек.
Что делает Хаб. Не пишет: все очереди, которые он описывает, отправляют почту наружу обычным SMTP. Остальные виды — про обработку входящего потока, а её Хаб ведёт у себя, а не на узле.
Рекомендуемые значения

smtp — для всего, что уходит наружу. Остальные четыре вида к отправке рассылки отношения не имеют.

pipe против http-delivery. Оба отдают письмо чужой программе, но по-разному: pipe запускает её на этом же узле на каждого получателя, http-delivery шлёт запрос по сети. Второй проще масштабировать и он честнее переживает недоступность обработчика — письмо остаётся в очереди и повторяется.

discard — не то же, что удалить получателя. Письмо всё равно проходит очередь и попадает в учёт; экономится только доставка.

Сравнение вида pipe и вида http-delivery — наше. Из руководства здесь все пять значений, умолчание smtp и требование перезапуска при смене вида на непустой очереди.
Пример в конфигурации
# разбор отказов программой на этом же узле
<domain bounces.example.com>
    type pipe    command "/opt/bounce/parse --envid \"$envid\" \"$user\""
</domain>

# тот же разбор, но по сети — обработчик может жить где угодно
<domain feedback.example.com>
    type http-delivery    http-delivery-url https://hub.example.com/api/v1/feedback
</domain>
Строка вида идёт первой в блоке не случайно: остальные строки очереди имеют смысл только при своём виде и в чужом молча игнорируются.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.
▲

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

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

Меняют вид, не опустошив очередь

§ 3.3.10.60

Чем чреватоПерезагрузки конфигурации мало — руководство требует перезапуска службы. Очередь продолжает работать по-старому, а конфигурация выглядит применённой.
Как заметитьpmta show settings печатает прежний вид.
Как правильноДождаться, пока очередь опустеет, либо перезапустить службу.

Ставят discard, чтобы не слать на плохие адреса

наш опыт

Чем чреватоПисьма всё равно ставятся в очередь, проходят её и попадают в учёт. Экономится только соединение с приёмником; работа по подготовке писем сделана впустую.
Как заметитьОбъём в учёте не падает, хотя доставка отключена.
Как правильноОтсеивать адреса на подаче — списками подавления, а не выбрасывать письма на выходе.

Ставят pipe, не задав программу

§ 3.3.10.111.1

Чем чреватоСтрока command для очереди этого вида обязательна. Без неё очередь не знает, что запускать, и письма стоят.
Как заметитьОчередь вида pipe растёт, доставок ноль.
Как правильноЗадать command рядом с видом — в том же блоке.
Совместимость
PowerMTA 6.0
описана в руководстве этой версии · платформа: любая
С какой версии директива доступна, вендор указывает не для всех — здесь пометки нет. Имя встречается и в издании руководства 5.0.
Справочные данные
Синтаксис
type { smtp | pipe | file | discard | http-delivery }
Значения
одно из пяти слов: smtp, pipe, file, discard или http-delivery
Умолчание
smtp § 3.3.10.60
Применение
нужен перезапуск сервиса
Очередь
затронет и то, что уже стоит в очереди
Где писать
<domain>
Сколько раз
один раз в блоке
Всё здесь — из руководства, с разделом.
Наследование
Значение сливается по блокам <domain> от общего к частному: побеждает наиболее подходящий блок, а не последний по файлу. Подхватывается по pmta reload только у пустой очереди: если письма в ней есть, руководство требует перезапуска службы. Блок <domain> можно вложить в <virtual-mta> — тогда вид действует только в этом потоке.
Как проверить на узле
Действующий вид печатает команда настроек очереди — строкой type в начале раздела очереди:
pmta show settings bounces.example.com/vmta1 | grep -E '^type'
pmta show queues | grep -i bounces.example.com
Расхождение между конфигурацией и этим выводом означает, что смена вида не применилась: в очереди были письма. Хаб виды очередей не задаёт.
В Хабе
Цена ошибки
опасно: последствия переживут откат
Сценарии
Собрать телеметрию