Postfix header_check 正则表达式,如果条件不匹配 - 当收件人域匹配时更改发件人地址

Postfix header_check 正则表达式,如果条件不匹配 - 当收件人域匹配时更改发件人地址

我有一个 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_checksbug 部分

相关内容