从收到的标题中删除用户 ID

从收到的标题中删除用户 ID

通过 PHP mail() 发送邮件时 - Postfix 会添加以下标头:

Received: by myhost.mydomain.com (Postfix, from userid 48)
    id XXXXXXXXXXX; Sun, 20 Nov 2011 21:22:13 +0100 (CET)

有没有办法删除 userid 部分,但保留其余部分?因此结果变为(如果正确):

Received: by myhost.mydomain.com (Postfix)
    id XXXXXXXXXXX; Sun, 20 Nov 2011 21:22:13 +0100 (CET)

Postfix 在本地主机上运行,​​仅用于通过 mail() 函数从 PHP 发送邮件。

关于删除整个标题的类似问题之前已经问过,但我不知道如何删除用户 ID 部分,但保留其余部分。

答案1

我认为你可以尝试类似以下的方法:

/etc/postfix/main.cf

header_checks = pcre:/etc/postfix/header_checks.pcre

/etc/postfix/header_checks.pcre

/^Received: by(.*) \(Postfix, from userid(.*)$/ REPLACE Received: by ${1}

答案2

在任何情况下,您不得编辑收到的行。

主要是它们是 RFC 5321 所要求的,不允许篡改。其次,它们是追踪滥用行为的宝贵来源。

假设您仅通过 Apache(用户 ID 48)使用 PHP 发送邮件,如果您看到来自用户 ID 5000 的消息,它会告诉您什么?您说对了:恶意用户或脚本正在疯狂运行。删除用户 ID 后,您能跟踪此问题吗?

答案3

现在你只能更改第一行。我的解决方案是使用正则表达式

/etc/postfix/main.cf

header_checks = regexp:/etc/postfix/header_checks

/etc/postfix/header_checks

/^Received: by (.*) .*Postfix, from userid [0-9]+\)\s*id ([A-F[:digit:]]+)(.*) (.*)/ REPLACE Received: by $1 (some text) id $2$3 (EEST)

您可以检查结果(http://rubular.com/r/JH14xFTWL9

或者

postmap -q "Received: by mail.xxxx.lt (Postfix, from userid 48) id 5F7CD1E148A Thu, 23 Oct 2014 15:55:08 +0300 (EEST)" regexp:/etc/postfix/header_checks

相关内容