我有一个 header_check,当接收方地址为 domain.com 时应该匹配,如果匹配,则它将发送方地址更改为[电子邮件保护]
我对此有点困惑。这是我的 header_check:
if /^To:(.*?)domain\.com/
/^From:(.*)/i REPLACE From: Systems <[email protected]>
endif
下面是我正在测试的示例标题:
Date: Sat, 30 Jan 2021 16:25:31 +0000
Subject: Test Email
From: System <[email protected]>
To: [email protected], [email protected],
[email protected], [email protected],
为便于阅读而截断。使用正则表达式测试套件进行测试时,第一行正则表达式匹配。第二行实际匹配和替换工作正常(即,如果我使用反向匹配,则替换工作没有问题)。
第一行为什么拒绝匹配?感谢您的见解。
Postfix 3.1.0
答案1
我找到了我的问题,它源于对它的工作原理的根本误解。header_check 每次只能对一行 (1) 进行操作。在上述情况下,即使 IF 行确实匹配,中间的操作行也不会匹配,因此什么也不做。大多数正则表达式工具默认使用多行。header_checks 则不使用。
简而言之,header_checks 只适用于单行内容。如果你想匹配一部分内容,然后对另一部分进行操作,那么 header_checks 就不适用了。
来源:man header_checks
bug 部分