reroute-to-virtual-mta

<domain>

Перевести письма этого получателя на другой адрес отправки
в конфигурации это строкаreroute-to-virtual-mtaвнутри блока <domain>
Сменить адрес отправки, не трогая очередь

Очередь у PowerMTA — это пара «получатель + адрес отправки». Эта строка меняет вторую половину: письма для указанного получателя уезжают через другой VirtualMTA или через целый пул. Получатель тот же, отправитель другой.

Необязательная оговорка after= откладывает переброс. Письмо уедет прежним адресом, и только пролежав в очереди указанное время (не меньше минуты), перейдёт на новый. Так дают шанс исходному адресу и переключаются, лишь когда он не справился.

Строку можно задать и на уровне узла — тогда она подействует на всё, для чего не переопределена. Пустая строка (“”) снимает унаследованное значение.

Главная ловушка — петля игнорируется молча. Узел проверяет всю цепочку перебросов целиком, и если она замыкается, переброс просто не выполняется: письма остаются в исходной очереди. Ни ошибки при разборе конфигурации, ни записи в журнале. Переброс адреса на самого себя — тоже петля, и он тоже тихо игнорируется. Для пула из петли исключаются только замкнутые пути, остальные работают.
Что делает Хаб. Пишет — но не эту строку, а её щадящий двойник backoff-reroute-to-virtual-mta: переброс на резервный адрес там, где очередь ушла в щадящий режим. Обычный, безусловный переброс Хаб не задаёт: у него это решение по состоянию очереди, а не по её имени.
Рекомендуемые значения

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

Оговорка after= считается только у первого переброса. Если цепочка идёт дальше, у следующих звеньев она игнорируется: путь проходится до конца. Задавать её глубже в цепочке бессмысленно.

Пул — только первым звеном. Если пул встретится в середине пути, он игнорируется; подробности — в разделе о перебросе в пул.

Совет всегда откладывать переброс — наш. Из руководства здесь синтаксис, минимум в одну минуту, тихое игнорирование петель, правило «после первого звена оговорка не считается» и очистка пустой строкой.
Пример в конфигурации
# даём исходному адресу десять минут, потом уводим на резервный
<domain aol.com>
    reroute-to-virtual-mta vmta2, after=10m</domain>

# то же в рамках одного потока: перебрасывается только он
<virtual-mta vmta1>
    <domain yahoo.com>
        reroute-to-virtual-mta pool, after=2m    </domain>
</virtual-mta>
Во втором блоке цель — пул: письма разойдутся по его участникам. Пул допустим только первым звеном цепочки; дальше по пути он был бы проигнорирован.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.
▲

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

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

Замыкают цепочку перебросов

§ 3.3.10.58

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

Ставят after= у второго звена цепочки

§ 3.3.10.58

Чем чреватоОговорка считается только у первого переброса. Дальше путь проходится до конца сразу, и задуманная задержка не наступает.
Как заметитьПисьма уходят на конечный адрес мгновенно, хотя задержка задана.
Как правильноСтавить after= только у первого звена — оно и решает, когда цепочка сработает.

Перебрасывают безусловно, без after=

наш опыт

Чем чреватоИсходный адрес перестаёт получать почту этого получателя вовсе. Если его греют, прогрев останавливается; если по нему считают репутацию, статистика обрывается.
Как заметитьУ адреса нулевой объём по получателю, к которому он раньше отправлял.
Как правильноДобавить after= — исходный адрес будет пробовать первым, а переброс включится, только если он не справился.
Совместимость
PowerMTA 6.0
описана в руководстве этой версии · платформа: любая
С какой версии директива доступна, вендор указывает не для всех — здесь пометки нет. Имя встречается и в издании руководства 5.0.
Справочные данные
Синтаксис
reroute-to-virtual-mta <name>
Значения
имя VirtualMTA или пула; необязательно через запятую after= и интервал времени, не меньше минуты; пустая строка снимает унаследованное значение
Применение
reload, перезапуск не нужен
Очередь
уже поставленное в очередь не затронет
Где писать
<domain>
Сколько раз
один раз в блоке
Всё здесь — из руководства, с разделом.
Наследование
Значение сливается по блокам <domain> от общего к частному: побеждает наиболее подходящий блок, а не последний по файлу. Строку можно задать и в корне файла — тогда она действует на весь узел. Блок <domain> можно вложить в <virtual-mta>: так перебрасывают только один поток. Пустая строка (“”) снимает унаследованное значение. Подхватывается по pmta reload; письма, уже лежащие в очереди, тоже перебрасываются — с учётом after=, считаемого от их постановки в очередь.
Как проверить на узле
Результат виден по списку очередей: у исходной пары писем не остаётся, они появляются у целевого адреса:
pmta show settings aol.com/vmta1 | grep -i reroute
pmta show queues | grep -i aol.com
Если письма остались в исходной очереди, а строка задана — почти наверняка узел нашёл петлю и проигнорировал переброс: сообщения об этом нигде не будет. Хаб перебросы показывает как обычные очереди.
В Хабе
Цена ошибки
с перерывом: применение прерывает работу узла
Сценарии
Ротация адресов отправки · Настроить темп под провайдера