macro-variables-preserve-case

<domain>

Сохранять ли регистр адресов в подстановках
в конфигурации это строкаmacro-variables-preserve-case falseвнутри блока <domain>
Регистр адреса в командной строке и в пути

Подстановки, которые узел раскрывает в строке command и в пути file-destination, по умолчанию приводятся к нижнему регистру. Эта строка отменяет приведение — но только для двух из них.

$to и $from — да, их регистр можно сохранить. Это адреса конверта целиком, и в редких случаях приёмная сторона к регистру чувствительна.

$user и $domain — нет, они приводятся всегда. Руководство объясняет почему: из них делают имена каталогов и файлов, а в файловых системах, различающих регистр, Example.com и example.com — два разных каталога.

Главная ловушка — включают и ждут не того. Строка не влияет на $user и $domain, а именно они чаще всего и стоят в пути. Включение выглядит как «теперь регистр сохраняется везде», а сохраняется он ровно в двух подстановках из десяти.
Что делает Хаб. Не пишет: очередей видов pipe и file не заводит. Если такая очередь появится, умолчание — верное значение: приведение к нижнему регистру избавляет от двух каталогов на одно имя.
Рекомендуемые значения

Умолчание почти всегда верно. Нижний регистр — то, что нужно и файловой системе, и сравнению адресов.

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

На имена каталогов не подействует. $user и $domain приводятся к нижнему при любом значении.

Совет учить обработчик сравнивать без учёта регистра — наш. Из руководства здесь умолчание и точный список: строка касается адресов конверта целиком, а имя получателя и его домен приводятся к нижнему всегда.
Пример в конфигурации
# обработчику важен исходный регистр адреса конверта
<domain bounces.example.com>
    type pipe
    command "/opt/bounce/parse --to \"$to\" \"$user\""
    macro-variables-preserve-case true</domain>
Регистр сохранится у $to, но не у $user в той же строке — он приводится к нижнему при любом значении.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.
▲

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

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

Включают ради имён каталогов

§ 3.3.10.111.2

Чем чревато$user и $domain приводятся к нижнему регистру при любом значении. Каталоги как назывались строчными, так и называются, а настройка выглядит применённой.
Как заметитьСтрока включена, имена каталогов не изменились.
Как правильноНичего: это поведение MTA. Регистр сохраняется только у $to и $from.

Включают «на всякий случай»

наш опыт

Чем чреватоАдрес конверта начинает приходить обработчику в исходном регистре. Сравнение с базой, где адреса хранятся строчными, перестаёт совпадать — и отказы разбираются не на тех получателей.
Как заметитьПосле включения обработчик перестал находить часть адресов.
Как правильноВернуть умолчание либо научить обработчик сравнивать без учёта регистра.
Совместимость
PowerMTA 6.0
описана в руководстве этой версии · платформа: любая
С какой версии директива доступна, вендор указывает не для всех — здесь пометки нет. Имя встречается и в издании руководства 5.0.
Справочные данные
Синтаксис
macro-variables-preserve-case <boolean>
Значения
yes или no; true и false принимаются наравне с ними
Умолчание
false § 3.3.10.111.2
Применение
reload, перезапуск не нужен
Очередь
уже поставленное в очередь не затронет
Где писать
<domain>
Сколько раз
один раз в блоке
Всё здесь — из руководства, с разделом.
Наследование
Значение сливается по блокам <domain> от общего к частному: побеждает наиболее подходящий блок, а не последний по файлу. В очереди другого вида строка игнорируется — она из раздела pipe, хотя те же подстановки раскрываются и в пути очереди вида file. Подхватывается по pmta reload.
Как проверить на узле
Значение печатает команда настроек очереди; результат виден по тому, что получает обработчик:
pmta show settings bounces.example.com/vmta1 | grep -i macro-variables
Проверить раскрытие подстановок на живом узле нечем — остаётся смотреть, что обработчик получил на вход. Хаб очередей вида pipe не заводит.
В Хабе
Цена ошибки
опасно: последствия переживут откат
Сценарии
Подключить платформу отправки