domain-macro

GlobalХаб задаёт сам

Имя для списка доменов, подставляемое в других строках
в конфигурации это строкаdomain-macroвнутри блока Global
Список доменов, названный один раз

Строка объявляет имя и привязанный к нему список доменов через запятую. Дальше это имя со знаком доллара подставляется там, где нужен список: в блоке получателя <domain $имя>, в приёме по доменам relay-domain, в объявлении ключей подписи domain-key.

В имени допустимы только буквы, цифры и подчёркивание — руководство оговаривает это прямо.

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

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

Проверять надо не строку макроса, а все места подстановки.

Вторая половина мельче: имя проверяется на буквы, цифры и подчёркивание. Дефис в имени — частая привычка из имён доменов — тут не годится.

Что делает Хаб. Пишет — в шаблоне политик получателей, по макросу на каждого крупного почтовика: mailru, rambler, ukrnet и так далее, всего четырнадцать.

Раскладка там ровно та, ради которой макросы и сделаны: строка макроса перечисляет домены приёмника, а следом идёт блок <domain $имя> с его политикой — пределами, повторами, сроком отказа.

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

Что ставить. Значение — имя и список; правила приходят из назначения:

Свойство Почему
имя по приёмнику, а не по признаку список правится вместе с приёмником, а не с задумкой
только буквы, цифры, подчёркивание требование MTA
один макрос — один приёмник иначе правка задевает чужие правила

Макрос «все крупные» выглядит удобным и оказывается опасным: у приёмников разные политики, и объединять их списком значит лишиться возможности развести.

Синтаксис и ограничение на символы имени — из руководства, § 3.3.1.55.4. Раскладка «макрос плюс блок получателя» — из шаблона политик Хаба. Разбивка требований наша.
Пример в конфигурации
# так пишет политики Хаб: макрос на приёмника, затем его блок
domain-macro mailru mail.ru,bk.ru,inbox.ru,list.ru<domain $mailru>
    max-errors-per-connection 10
    retry-after 30m
</domain>
Правка списка меняет поведение всех блоков, где имя подставлено. Проверять надо места подстановки, а не саму строку макроса.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.
▲

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

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

Правят список, не проверив места подстановки

наш опыт

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

Берут дефис в имя макроса

§ 3.3.1.55.4

Чем чреватоДопустимы только буквы, цифры и подчёркивание. Имя с дефисом MTA не примет, и конфигурация не применится целиком.
Как заметитьПроверка конфигурации сообщает об ошибке в строке макроса.
Как правильноПисать подчёркивание вместо дефиса.
Совместимость
PowerMTA 6.0
описана в руководстве этой версии · платформа: любая
С какой версии директива доступна, вендор указывает не для всех — здесь пометки нет. Имя встречается и в издании руководства 5.0.
Справочные данные
Синтаксис
domain-macro MACRO-NAME DOMAIN-LIST
Значения
имя из букв, цифр и подчёркиваний, затем список доменов через запятую
Применение
reload, перезапуск не нужен
Очередь
уже поставленное в очередь не затронет
Где писать
Global
Сколько раз
можно повторять
Всё здесь — из руководства, с разделом.
Наследование
Директива пишется в корне файла конфигурации и действует на весь узел: макрос один на экземпляр. Наследования у него нет — это подстановка имени, а не настройка со значением.
Как проверить на узле
Смотреть надо и объявление, и все места подстановки:
grep -n '^domain-macro' /etc/pmta/config
grep -n '\$[a-zA-Z_][a-zA-Z0-9_]*' /etc/pmta/config | head -20
Вторая команда показывает, где имя подставлено. Правка списка задевает все эти места сразу — в том числе те, о которых при правке не думали.
В Хабе
Значение
Хаб подбирает сам — темп, стадия прогрева, метрики
Цена ошибки
безопасно: неверное значение ничего не ломает
Сценарии
Настроить темп под провайдера