通过 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