Решать «жёсткий или мягкий» там, где пришёл ответ

Убрать шаг истолкования между отказом и решением

Задача. Отказ надо признать окончательным или временным до того, как на него что-то среагирует. Когда категорию MTA переводят в свою уже после приёма записи, классификаторов два подряд, и ломается как раз перевод.

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

  • bounce-category-patterns — назначает свои имена категорий по словам приёмника;
  • <smtp-pattern-list> — тот же механизм сопоставления, но ради реакции очереди, а не ради ярлыка;
  • /config/address-lists — куда попадает подтверждённый окончательный отказ, без правки файлов.

Области у составляющих разные. Безымянный блок образцов проверяется раньше поставляемых образцов, именованный, подключённый к получателю, — раньше обоих. Списки подавления подключаются к источнику или к адресу отправки (suppression-lists).

Как они взаимодействуют. Цепочка — классификация, решение, подавление. Перенос классификации на узел даёт в записи категорию, уже сказанную своими словами, и правило подавления читает поле напрямую. Оговорка — долговечность: категория ставится в момент записи, и смена образцов прошлое не перекрашивает, поэтому текст ответа стоит хранить рядом с категорией.

Главная ловушка — ждать, что новые образцы перекрасят прошлые отказы. Категория пишется в запись в момент отказа: исправленный образец действует только вперёд, а старые записи остаются с прежней категорией.
Что делает Хаб. Применяет наполовину. Безымянный <bounce-category-patterns> в шаблоне политик есть, но категории в нём вендорские — spam-related, virus-related и соседние, — а не наши «жёсткий» и «мягкий»: окончательный отказ от временного Хаб отличает сам, после приёма записи. smtp-pattern-list blocking-errors стоит ради реакции, а списков подавления на узле нет — подавление живёт в базе Хаба.
Рекомендуемые значения

Три шага и где каждый живёт:

Шаг Чем Что остаётся
классификация bounce-category-patterns bounceCat своим именем
реакция очереди <smtp-pattern-list> переход в щадящий режим
подавление /config/address-lists адрес в списке без правки файлов
Порядок проверки образцов, свои имена категорий, реакция очереди и операции со списками — из руководства (§ 11.7, § 3.3.10.73, § 3.3.15, § 8.3.2). Сама схема — наша гипотеза.
Пример в конфигурации
<bounce-category-patterns>
    rcpt-to /invalid recipient/ bad-mailbox    /mailbox +(is +)?full/ quota-issues
</bounce-category-patterns>
По мотивам примера руководства: rcpt-to ограничивает образец ответами на команду получателя; имена категорий можно давать свои.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.
Совместимость
PowerMTA 6.0
описана в руководстве этой версии · платформа: любая
С какой версии директива доступна, вендор указывает не для всех — здесь пометки нет. Имя встречается и в издании руководства 5.0.
Как проверить на узле
Посмотреть образцы категорий, которые действуют на узле:
grep -rn -A6 '<bounce-category-patterns' /etc/pmta/
Безымянный блок проверяется раньше поставляемых образцов, поэтому своё правило в нём перекрывает категорию MTA.