Свой адрес площадке, которая ничего для этого не делает

Разделение, не требующее правок на чужой стороне

Задача. Подключённая платформа сдаёт почту по SMTP, править её ради заголовков нельзя, — а её письма должны уходить своим адресом отправки, а не тем, что у узла по умолчанию.

Из чего складывается:

  • vmta-select-pattern — правило по обратному адресу платформы;
  • vmta-select-listener — вместо этого: свой адрес и порт подачи;
  • vmta-select-source-ip — вместо этого: адрес отправки по адресу, с которого платформа подключается.

Области у составляющих разные. Все три действуют через блок <source>, а список правил у источника ровно один: если источник обслуживает несколько платформ, их правила живут в одном упорядоченном списке.

Как они взаимодействуют. Три пути к одной цели, и выбирать надо по тому, что у платформы устойчиво. Обратный адрес обычно устойчивее всего и ничего не стоит. Адрес подключения надёжен, только если он не общий. Своя точка подачи надёжнее всего, но стоит адреса и слушателя на платформу. Все три стоят ниже того, что платформа скажет сама: начни она ставить X-Virtual-MTA там, где разрешён process-x-virtual-mta, схема перестанет действовать молча.

Главная ловушка — сопоставлять адрес из заголовка From. Он меняется от рассылки к рассылке, а правило mail-from в <pattern-list> сверяет обратный адрес конверта — его и надо брать, привязав домен к концу адреса.
Что делает Хаб. Применяет основным путём: список pmta-pattern направляет письмо по домену обратного адреса на поток пары «домен и адрес», и платформе ничего менять не нужно. Свой адрес подачи платформе Хаб не выдаёт, а by-smtp-source-ip в общем источнике служит нижним слоем, а не заменой списка.
Рекомендуемые значения

Как выбрать способ:

Способ Устойчиво, если Цена
по обратному адресу домен возврата у платформы постоянный ничего
по точке подачи у платформы свой адрес или порт подачи адрес и слушатель на платформу
по адресу подключения платформа подключается с адреса, который ни с кем не делит ничего, но хрупко на чужой инфраструктуре
Способы выбора, их порядок и один список на источник — из руководства (§ 9.4.2–9.4.4, § 3.3.7.42). Сравнение — наше; схема — гипотеза.
Пример в конфигурации
<pattern-list platforms>
    mail-from /@bounce\.platform-a\.com$/ virtual-mta=vmta-a    mail-from /@bounce\.platform-b\.com$/ virtual-mta=vmta-b
</pattern-list>
<source 0/0>
    pattern-list platforms
</source>
Правила проверяются по порядку, первое совпадение побеждает; точки в домене экранированы.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.
Совместимость
PowerMTA 6.0
описана в руководстве этой версии · платформа: любая
С какой версии директива доступна, вендор указывает не для всех — здесь пометки нет. Имя встречается и в издании руководства 5.0.
Как проверить на узле
Проверить, куда попадают письма платформы:
pmta show queues '*/vmta-a'
Очереди с адресом платформы после её рассылки — правило сработало; письма в очереди адреса по умолчанию — обратный адрес не совпал.