Выбор адреса отправки по содержимому письма

<pattern-list>
Слой маршрутизации между «как выглядит письмо» и «с чего оно уйдёт»

Список правил, по которым узел решает, с какого адреса отправить письмо. Смотрит он на само письмо: заголовок, обратный адрес конверта или адрес получателя.

Три сопоставителя, один синтаксис. Директива, необязательный параметр, регулярное выражение (регистр не важен) и результат. Результат обычно — имя адреса отправки, поэтому список и оказывается слоем маршрутизации между тем, как письмо выглядит, и тем, откуда оно уходит. Бывает и другой результат — приоритет получателя.

Списки вкладываются друг в друга. Правило может вместо ответа передать разбор другому списку — получается дерево решений прямо в конфигурации: один список делит поток на группы, следующие разбираются внутри каждой.

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

Это не тот список, что реагирует на приёмника. Похожее имя <smtp-pattern-list> — про ответы SMTP при доставке и щадящий режим. Здесь — про исходящий выбор до отправки.

Главная ловушка — путаница двух похожих имён. pattern-list выбирает адрес отправки по содержимому письма и живёт в блоке подачи; smtp-pattern-list реагирует на ответы приёмника и живёт в блоке приёмника. Тот, кто ищет в конфигурации реакцию на отказы и находит первое имя, решит, что она настроена. У нас в конфигурации стоят оба, в разных блоках: pattern-list — у источников подачи, smtp-pattern-list blocking-errors — у приёмников.
Что делает Хаб. Пишет — и на этом списке держится вся раскладка отправки. Правило заводится на каждую пару «домен и адрес»: обратный адрес письма сопоставляется с доменом, и письмо уходит с закреплённого за ним адреса отправки.

Так один порт подачи обслуживает сколько угодно доменов: площадка подаёт письмо с обратным адресом своего домена, а узел сам направляет его на нужный адрес отправки. Ни площадке, ни порту знать про адреса не нужно.

Ссылка на список стоит в блоке подачи, рядом с умолчанием default-virtual-mta — оно и срабатывает, когда ни одно правило не подошло.

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

Чем выбирать адрес отправки — три сопоставителя:

Сопоставитель По чему смотрит Когда уместен
по обратному адресу адрес конверта наш случай: ничего не требует от подающей стороны
по заголовку любой заголовок письма когда подающая система умеет их ставить
по получателю адрес получателя редко: у письма получателей бывает много

Обратный адрес — самый надёжный выбор. Он есть у каждого письма и не зависит от того, умеет ли площадка ставить заголовки.

Выражение писать с якорем конца. Правило вида /@домен$/ совпадёт с доменом, а без якоря — и с любым, где этот домен внутри. Хаб экранирует домен и ставит якорь именно поэтому.

Умолчание обязательно. Письмо, не подошедшее ни под одно правило, уйдёт с адреса по умолчанию — а если его нет, узел придётся объяснять, почему письмо не ушло.

Таблица сопоставителей и совет про якорь наши. Из руководства здесь состав трёх сопоставителей, единый синтаксис правила, вложение списков и оговорка про нескольких получателей.
Пример в конфигурации
# правило на каждую пару «домен → адрес отправки»
<pattern-list pmta-pattern>
    mail-from /@example\.com$/ virtual-mta=mta-news-1    mail-from /@shop\.example\.net$/ virtual-mta=mta-shop-1
</pattern-list>
<source {pmta-auth}>
    pattern-list pmta-pattern
    default-virtual-mta pmta-pool
</source>
Выделенная строка — то, что Хаб пишет на каждый домен. Якорь в конце обязателен: без него правило поймало бы и @example.com.other.net. Нижняя строка ловит всё, что не подошло ни под одно правило.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.
▲

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

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

Пишут выражение без якоря конца

§ 3.3.14

Чем чреватоПравило /@example.com/ совпадёт и с @example-com.net, и с @example.com.attacker.net. Письма уйдут с чужого адреса отправки, и заметить это можно только по учёту.
Как заметитьВ учёте письма домена уходят с адреса, закреплённого за другим доменом.
Как правильноСтавить якорь конца и экранировать точки в имени домена — так делает Хаб при генерации.

Принимают этот список за реакцию на отказы

§ 3.3.15

Чем чреватоИмена отличаются одним словом, стороны узла противоположные. Найдя в конфигурации pattern-list, решают, что реакция на ответы приёмника настроена, — а её нет.
Как заметитьОчереди никогда не переходят в щадящий режим, при том что список образцов в конфигурации «есть».
Как правильноСмотреть имя целиком и блок, в котором стоит ссылка. Реакция на приёмника — только smtp-pattern-list.

Обходятся без адреса по умолчанию

§ 3.3.14

Чем чреватоПисьмо, не подошедшее ни под одно правило, остаётся без адреса отправки. Появление нового домена у площадки, для которого правило ещё не написано, оборачивается непонятным отказом.
Как заметитьЧасть писем не уходит после добавления домена, в журнале жалоба на выбор адреса отправки.
Как правильноДержать default-virtual-mta в блоке подачи заполненным. Он и есть страховка на случай нового домена.
Совместимость
PowerMTA 6.0
описана в руководстве этой версии · платформа: любая
С какой версии директива доступна, вендор указывает не для всех — здесь пометки нет. Имя встречается и в издании руководства 5.0.
Наследование
Сам список живёт в корне файла и не наследуется. Наследуется ссылка на него — строка pattern-list в блоке подачи, по обычному правилу слияния источников: узкий блок перекрывает широкий. Значит, у разных подающих систем могут действовать разные списки. Вложенные списки разбираются в порядке вызова, а не слияния.
⇄

Связанные записи

2 связи

Как проверить на узле
Проверять надо не список, а то, с какого адреса ушло письмо:
grep -n -A10 '^<pattern-list' /etc/pmta/config
pmta show vmtas
Первая покажет правила и порядок. Вторая — какие адреса отправки реально заняты работой: если письма идут не с тех адресов, обычно виновато выражение без якоря или отсутствие правила, и тогда сработало умолчание.
В Хабе
Цена ошибки
обратимо: вредит, пока стоит
Сценарии
Ротация адресов отправки · Подключить платформу отправки