我在 Ubuntu 服务器上使用 postfix-pcre。如果我使用以下命令测试 header_checks 配置
postmap -q 'To: "Markus Schlei" <[email protected]>' regexp:/etc/postfix/header_checks
我收到以下警告信息:
postmap:警告:regexp map /etc/postfix/header_checks,第 36 行:前面的正则表达式无效。
而且它也没有拒绝我的测试。在第 36 行我得到了以下代码:
/^To:.*\@(?!(gmail\.com)).*/ REJECT Test-Nr-1
我想拒绝所有不匹配的消息gmail.com
编辑 1:我发现,如果我删除“(?!(..)”警告信息消失了,但是它却做了我想要的相反的事情。
答案1
您应该知道有 POSIX 正则表达式和 PCRE 正则表达式。
您正在使用负面前瞻(?!
)带有正则表达式表。这种类型的正则表达式仅受 PCRE 正则表达式表支持。
要了解您的 Postfix 系统支持哪些类型的查找表,请使用“postconf -m”命令。
如果列出了 pcre,则只需切换到 pcre 表而不是 regexp 表。如果没有,则必须安装postfix-pcre。