Состояние файла маршрута 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
Другие вопросы по тегам