Укажите удаленный порт для использования для почты через exim4
Вопрос
У меня есть стандартная система Debian Etch, использующая Exim4.Домены в основном локальные, но есть и удаленные.Для управления доставкой удаленной почты я использую файл конфигурации Debian:
/etc/exim4/hubbed_hosts
В этом файле перечислены имена доменов и удаленные машины MX, на которые осуществляется доставка.Например:
example.org: mx.example.com
example.com: mx2.example.com
Глядя на файл конфигурации exim4, я вижу, что он используется следующим образом:
hubbed_hosts:
debug_print = "R: hubbed_hosts for $domain"
driver = manualroute
domains = "${if exists{CONFDIR/hubbed_hosts}\
{partial-lsearch;CONFDIR/hubbed_hosts}\
fail}"
route_data = ${lookup{$domain}partial-lsearch{CONFDIR/hubbed_hosts}}
transport = remote_smtp
Проблема у меня в том, что некоторый всем хостам, которые я использую, необходимо, чтобы почта доставлялась на нестандартный порт.К сожалению, файл Hubbed_hosts Debian не работает, если я попытаюсь изменить его, включив в него порт:
example.org: mx1.example.org:2525
example.com: 1.2.3.4.2525
Можно ли динамически разрешить указание порта?
Решение 2
Я надеялся на что-то более динамичное - и это решение работает:
port = ${if exists{/etc/exim4/ports.list}\
{${lookup{$domain}lsearch{/etc/exim4/ports.list}\
{$value}{25}}}{25}}
Тогда простой файл может иметь список портов для каждого домена:
example.org: 2525
example.com: 26
Другие советы
Фактически это поддерживается по умолчанию без каких-либо изменений в конфигурации exim4.
В Hubbed_hosts вы разделяете хосты двоеточием и указываете номер порта с помощью двойного двоеточия.БЫВШИЙ:
domain1: server1:server2::port:server3
domain2: server1::port
domain3: server1:server2
Для получения дополнительной информации проверьте http://www.exim.org/exim-html-current/doc/html/spec_html/ch20.html#SECID122
Вероятно, вы могли бы использовать оператор ${extract}, чтобы объединить номера портов и имена хостов, как в примере в исходном вопросе.
Что-то вроде (непроверено):
route_data = ${extract{1}{:}{${lookup{$domain}partial-lsearch{CONFDIR/hubbed_hosts}}}}
создать новый транспорт, в котором указан порт
remote_hub_2525:
driver = smtp
port = 2525
а затем создайте маршрутизатор для доменов, нуждающихся в нестандартной доставке
non_standard_hub:
driver = manualroute
domains = example.org : example.com
transport = remote_hub_2525
no_more