Назад | Перейти на главную страницу

условие файла маршрута exim

Используя exim4, я настроил маршрут для использования внешнего SMTP-сервера. Я использую cPanel, который хранит список доменов, настроенных локально на сервере, в файле: / etc / localdomains. В результате я установил условие, чтобы отправлять через этот ретранслятор, только если домен адреса отправителя находится в этом файле. Это прекрасно работает.

Однако теперь я хочу добавить еще одно условие, которое гарантирует, что если домен указан в файле, например, / etc / norelaydomains, он НЕ должен отправляться с помощью реле. Я подумал, что будет легко заставить это работать, добавив аналогичное условие к тому, которое гарантирует, что домен находится в / etc / localdomains, однако это, похоже, работает некорректно (с помощью реле не отправляется почта).

Напомним, что я хочу: если sender_domain находится в / etc / localdomains, а sender_domain НЕ В / etc / norelaydomains, тогда отправьте с помощью реле, в противном случае отправьте с использованием локального почтового сервера.

Моя обычная установка, которая отлично работает:

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

Мы будем очень благодарны за любую помощь в том, чтобы заставить это работать.

Я понял.

Ваша проблема в подстановке неполного результата.

${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