eximpath文件条件

使用exim4我已经build立了一个使用外部SMTP服务器的路由。 我使用的是cPanel,在服务器上保存本地设置的域列表:/ etc / localdomains。 因此,如果发件人地址域在这个文件中,我已经设置了一个条件,只通过这个中继发送。 这工作得很好。

但是现在我想添加另一个条件来确保如果一个域被列在一个文件中,说/ etc / norelaydomains不应该使用中继来发送。 我认为通过添加一个类似的条件来确保这个域是在/ etc / localdomains中是一件容易的事,但是这似乎不能正常工作(不使用中继发送邮件)。

回顾一下我想要的是:如果sender_domain是IN / 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 

得到这个工作的任何帮助将不胜感激。

我懂了。

您的问题是在不完整的结果replace。

${lookup{value}lsearch{file}}默认返回find的string或空string。 您可以通过结果replace修改该行为:

${lookup{value}lsearch{file}{yes}}

如果在文件中find了值,那么该版本返回yes否则返回空string。 但是,exim的条件评估只有“是”,“是”和非零的正面评估才是合乎逻辑的。 因此

${lookup{value}lsearch{file}{no}}

相当于

${lookup{value}lsearch{file}{no}{no}}

总是。 当然,你的路由器永远不会被使用。 你必须明确地replace两个结果:

 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