suppression-lists

<source>

Списки подавления для писем из этого источника
в конфигурации это строкаsuppression-listsвнутри блока <source>
То же имя ещё 2:<source><virtual-mta><virtual-mta-pool>— часть из них другие настройки, часть та же самая
Подавление на входе, а не на выходе

Строка называет один или несколько объявленных списков — через запятую. Получатель, попавший хотя бы в один, до отправки не доходит.

Когда именно отправитель узнаёт, решает соседняя строка accept-invalid-recipients. При no получатель отвергается прямо в команде RCPT — подающая программа получает отказ и может на него среагировать. При yes письмо принимается и позже отбивается записью 5.7.1 (delivery not authorized), в тексте которой стоит имя сработавшего списка.

Подключение в источнике — лучшая из двух точек. Та же строка бывает в <virtual-mta> и в пуле, но там выбора нет: письмо всегда принимается и отбивается потом. Здесь можно отказать честно и сразу.

Списков может быть несколько — они проверяются все, и достаточно совпадения в любом.

Главная ловушка — одна строка вместо двух. Подавление, подключённое без accept-invalid-recipients no, работает, но превращает отказ в отбитое письмо: подача проходит без ошибок, отправитель считает письмо принятым, а разбираться приходится по отчётам.
Что делает Хаб. Не пишет: чёрный список Хаб держит в своей базе, общий с рассылочной платформой, и проверяет до узла — отписавшийся в прогревочном письме не получит боевую рассылку, и наоборот. Списки на узле были бы второй линией на случай подачи мимо Хаба, но потолок в пятьсот образцов делает их непригодными для полного чёрного списка: сюда влезет только то, что обязано не уйти ни при каких условиях.
Рекомендуемые значения

Значение — имена списков через запятую. Настраивается это парой строк, и вторая важнее первой:

accept-invalid-recipients Что происходит Кому подходит
no отказ в команде RCPT, отправитель знает сразу своя подача: ошибку видно и можно починить
yes письмо принято и отбито позже чужая подача, не рассчитанная на отказ RCPT

Что класть в списки. Не весь чёрный список — вендор советует не более пятисот образцов, — а жалобщиков, спам-ловушки и адреса, подавления которых требует клиент.

Зависимость от accept-invalid-recipients, код отказа и совет про 500 образцов — из руководства (§ 11.15.1). Что класть в список — наше.
Пример в конфигурации
# две строки — одна настройка: список и способ отказа
<address-list suppression1>
    address /^complaints\+/
</address-list>

<source 10.0.0.0/24>
    accept-invalid-recipients no
    suppression-lists suppression1,suppression2</source>
Списков здесь два, проверяются оба. С accept-invalid-recipients no подающая программа получит отказ прямо на RCPT; уберите эту строку — и то же подавление превратится в отбитые письма.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.
▲

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

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

Подключают список без accept-invalid-recipients

§ 11.15.1

Чем чреватоПодавление работает, но отправитель узнаёт о нём из отчёта, а не при подаче. Для своей подачи это потеря сигнала: ошибку, которую можно было починить сразу, приходится вылавливать в отказах.
Как заметитьПодача проходит без ошибок, в отчётах отказы 5.7.1.
Как правильноСтавить обе строки вместе. Это одна настройка, записанная в двух местах одного блока.

Кладут в список весь чёрный список

§ 11.15

Чем чреватоВендор советует не более пятисот образцов. Реальный чёрный список — десятки тысяч адресов; такая конфигурация становится неуправляемой, а проверка дорогой.
Как заметитьФайл конфигурации разрастается, применение замедляется.
Как правильноПолный список держать в базе отправляющей системы, на узле — короткий список того, что обязано не уйти никогда.

Дописывают список в узкий блок, ожидая сложения

§ 3.3.7

Чем чреватоБолее узкий блок источника перекрывает значение целиком. Списки широкого блока для этой подсети перестают проверяться разом.
Как заметитьПосле добавления «частного» списка перестаёт работать общий.
Как правильноПеречислять в узком блоке все нужные списки, а не только новый.
Совместимость
PowerMTA 6.0
описана в руководстве этой версии · платформа: любая
С какой версии директива доступна, вендор указывает не для всех — здесь пометки нет. Имя встречается и в издании руководства 5.0.
Справочные данные
Синтаксис
suppression-lists <list>
Значения
имена объявленных списков адресов через запятую
Применение
reload, перезапуск не нужен
Очередь
уже поставленное в очередь не затронет
Где писать
<source>
Сколько раз
один раз в блоке
Всё здесь — из руководства, с разделом.
Наследование
Директива живёт в <source> и сливается по правилу источников: более узкий блок перекрывает более широкий. Перекрывает целиком — списки узкого блока не добавляются к спискам широкого, а заменяют их. Та же строка бывает в <virtual-mta> и в пуле; это вторая, независимая точка проверки, а не продолжение этой.
Как проверить на узле
Сработавшее подавление видно по отказу — в его тексте стоит имя списка:
pmtaacctfind --output csv[rcpt,dsnStatus,dsnDiag] /var/log/pmta/acct-*.csv
5.7.1 (delivery not authorized) — сработал список источника при включённом приёме неверных получателей. Если записей нет вовсе, а письма уходят, проверьте, тот ли блок <source> совпал с адресом подачи: перекрывает самый узкий.
В Хабе
Цена ошибки
обратимо: вредит, пока стоит
Сценарии
Классификация отказов · Подавление адресов