Состояние файла маршрута exim
Используя exim4 я настроил маршрут для использования внешнего SMTP-сервера. Я использую cPanel, которая хранит список доменов, локально настроенных на сервере, в файле: / etc / localdomains. В результате я установил условие отправки только через этот ретранслятор, если домен адресов отправителя находится в этом файле. Это работает просто отлично.
Однако теперь я хочу добавить еще одно условие, гарантирующее, что если домен указан в файле, скажем / etc / norelaydomains, его НЕ следует отправлять с помощью ретранслятора. Я подумал, что было бы легко заставить это работать, добавив аналогичное условие, гарантирующее, что домен находится в / etc / localdomains, однако это, кажется, не работает правильно (никакая почта не отправлена с помощью ретранслятора).
Напомним, что я хочу: если sender_domain - IN /etc/localdomains, а sender_domain - не IN /etc/norelaydomains, то отправьте с помощью relay, в противном случае отправьте с использованием локального почтового сервера.
Моя нормальная настройка, которая работает нормально:
my_route:
condition = ${lookup {$sender_address_domain} \
lsearch {/etc/localdomains} {yes}}
driver = manualroute
domains = !+local_domains
transport = my_relay
route_list = * mysmtp.com
Настройка, которую я пытался (используя это, никакие письма не проходят через реле)
my_route:
condition = ${lookup {$sender_address_domain} \
lsearch {/etc/localdomains} {yes}}
condition = ${lookup{$sender_address_domain} \
lsearch{/etc/norelaydomains} {no}}
driver = manualroute
domains = !+local_domains
transport = my_relay
route_list = * mysmtp.com
Любая помощь в получении этого на работу будет принята с благодарностью.
1 ответ
Я понял.
Ваша проблема в неполной подстановке результата.
${lookup{value}lsearch{file}}
по умолчанию возвращает найденную строку или пустую строку. Вы можете изменить это поведение путем подстановки результата:
${lookup{value}lsearch{file}{yes}}
Эта версия возвращается yes
если в файле найдено значение, а в противном случае - пустая строка. Но оценка состояния exim трактует как логическое ИСТИНА только "да", "истинно" и ненулевые положительные значения. Следовательно
${lookup{value}lsearch{file}{no}}
эквивалентно
${lookup{value}lsearch{file}{no}{no}}
Всегда. Конечно, ваш маршрутизатор никогда не будет использоваться. Вы должны явно заменить оба результата:
my_route:
condition = ${lookup {$sender_address_domain}lsearch{/etc/localdomains} {yes}{no}}
condition = ${lookup {$sender_address_domain}lsearch{/etc/norelaydomains} {no}{yes}}
driver = manualroute
domains = !+local_domains
transport = my_relay
route_list = * mysmtp.com