Используя 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