Exim 过滤器 TLD 阻止的不仅仅是 TLD

Exim 过滤器 TLD 阻止的不仅仅是 TLD

需要丢弃以特定 TLD 结尾的电子邮件但存在问题,过滤器示例:

if first_delivery
and ("$h_to:, $h_cc:" contains ".win$")
or ("$h_from:" contains ".win$")
then
seen finish
endif

问题是,它不仅匹配

[电子邮件保护]

但是也

某物。[电子邮件保护]

我们怎样写它才能使其只影响 TLD 本身?

答案1

首先,contains不支持正则表达式。

此外,您需要正确转义在 exim 变量扩展步骤中具有特殊含义的任何字符(例如$\),这些字符应保留在实际的比较步骤中。

(大概您的过滤器匹配任何内容的原因是,它$被解释为不存在的变量,并且在字符串比较之前发生的变量扩展步骤中消失了。)

看起来应该起作用的选项是ends(字符串末尾的字符串比较)和matches(正则表达式匹配)。

例如

if $h_from: ends ".win"

或者

if $h_from: matches \\.win\$

或(如果您想要引号,例如如果表达式中有空格)

if $h_from: matches "\\\\.win\\$"


请参阅22. 字符串测试条件有关详细信息,请参阅 Exim 过滤器手册中的部分。

相关内容