Реакция на стороне узла

MTA отвечает в том же соединении, где увидел отказ

Задача. Приёмник начинает отклонять или откладывать письма с одного адреса отправки. Реакция на следующем опросе телеметрии опаздывает на минуты, реакция на самом ответе — мгновенная, и способен на неё только узел.

Из чего складывается:

  • <smtp-pattern-list> — ответы, на которые стоит реагировать, регулярными выражениями;
  • backoff-max-msg-rate — темп при совпадении;
  • backoff-retry-after — паузы между попытками при совпадении;
  • backoff-reroute-to-virtual-mta — самая сильная реакция: письма очереди уходят через другой адрес отправки или пул, пока очередь в щадящем режиме.

Области у составляющих разные. Список ответов подключается в блоке получателя, а щадящие значения задаются на получателя внутри адреса отправки — вся схема выражена в самой узкой области, какая есть у PowerMTA.

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

Главная ловушка — переключать режим без щадящих значений. Совпадение в <smtp-pattern-list> честно переведёт очередь в режим, но backoff-max-msg-rate и backoff-retry-after по умолчанию берут обычные значения — очередь «в щадящем режиме» давит на приёмника с прежней силой.
Что делает Хаб. Применяет целиком. Во всех пятнадцати блоках шаблона политик стоит smtp-pattern-list blocking-errors — ответы, по которым очередь переходит в щадящий режим; значения щадящего режима пишутся из пресета узла в правилах почтовиков внутри адреса отправки, а backoff-reroute-to-virtual-mta уводит очередь на резервный адрес того же узла, когда такой есть. Адресам под прогревом щадящих строк нет. Правила пишет Хаб, исполняет узел — ровно то разделение труда, что в схеме.
Рекомендуемые значения

Реакции по силе:

Реакция Строка Что происходит
тормоз backoff-max-msg-rate меньше писем тому же приёмнику
пауза backoff-retry-after реже попытки
увод backoff-reroute-to-virtual-mta письма очереди, в том числе новые, уходят с другого адреса, пока режим не кончился
Действие mode=backoff, щадящие строки и увод — из руководства (§ 3.3.15, § 3.3.10.41, § 3.3.10.48, § 3.3.10.59). Разделение труда — наша гипотеза.
Пример в конфигурации
<smtp-pattern-list blocking-errors>
    reply /421 .*(rate|too many)/ mode=backoff</smtp-pattern-list>
<domain [*.]yahoo.com>
    smtp-pattern-list blocking-errors
    backoff-max-msg-rate 50/h
    backoff-reroute-to-virtual-mta vmta-reserve
</domain>
Выражение — для примера; пока очередь в щадящем режиме, письма уходят с vmta-reserve, а необязательное after= откладывает увод.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.
Совместимость
PowerMTA 6.0
описана в руководстве этой версии · платформа: любая
С какой версии директива доступна, вендор указывает не для всех — здесь пометки нет. Имя встречается и в издании руководства 5.0.
Как проверить на узле
Проверить, какие очереди сейчас в щадящем режиме:
pmta show queues --mode=backoff
Очереди в списке — спусковой крючок срабатывает; пустой список при отказах в учёте — ответы не совпадают с выражениями.