从 postfix 发送的邮件中删除邮件头

从 postfix 发送的邮件中删除邮件头

Postfix 守护进程发送的邮件中有一个非常烦人的标题,我正在寻找一种方法来摆脱它:

Received: by somedomain.net (Postfix, from userid 509)

有点离题,但是是否也可以从 Message-ID 中删除主机名,只留下域?

Message-ID: <[email protected]>

答案1

看来 serverfault 已经对此有了有意义的答案:在中
使用header_checks指令main.cf

查看完整答案

我建议您也阅读评论,不建议系统地删除标题。

答案2

您可以使用 header_checks 来忽略标题,或者更好的是,使用正则表达式 X-Received 或类似内容来替换它。

话虽如此,如果您删除了“已接收:”行,请记住,这可能会增加该服务器发送的电子邮件的垃圾邮件概率。标头检查通常是贝叶斯垃圾邮件分析的一部分。

答案3

您可以设置帖子队列过滤器。您的 perl/sed 技能如何?

您需要做的第一件事是编写一个脚本,该脚本将接受 上的原始消息STDIN,并根据需要修改该消息(我假设您已经具备此功能)。然后配置 postfix 将所有消息作为过滤器传递给该脚本。作为脚本执行的最后一件事,将消息传回 postfix。

对于编写脚本,我建议使用 perl。它有一个非常强大的正则表达式引擎。您还可以使用它Net::SMTP来轻松地重新提交回 postfix。

以下是如何配置 postfix 来执行此操作:

master.cf您的smtpd行中,更改最后一部分以包含过滤器。

原文如下:

smtp      inet  n       -       n       -       -       smtpd

新队:

smtp      inet  n       -       n       -       -       smtpd -o content_filter=myfilter

将您的过滤服务添加到master.cf

myfilter unix  -       n       n       -       3       pipe
    flags=   user=nobody argv=/usr/local/bin/myfilter.pl localhost 25252 $sender $recipient

请注意,这里的发件人和收件人来自信封不是身体。当将消息传回 Postfix 时,您需要将其作为信封的一部分。

最后添加一个未过滤的 smtp 接收器来master.cf接受新修改的消息:

local:25252 inet n      -       n       -       -       smtpd
    -o content_filter=

答案4

正如所提到的,Postfix header_checks 是执行此操作的地方。我在代表 Amazon EC2 云中的服务器发送邮件的邮件中继上使用它。反垃圾邮件系统讨厌找到与 EC2 相关的任何内容,因此这种伪装很遗憾是必要的。话虽如此,我可能会在将来为生产网络复制此配置。邮件信誉是一项棘手的工作,伪装所有邮件以使其看起来来自少数中继使信誉管理更容易。

以下是一个 header_checks 代码片段示例,供您参考。

/^(已收到: .amazonaws.com。)/ 更换 X-Cloak-$1

这将查找并抓取“Received: host1.amazonaws.com”并将其替换为“X-Cloak-Received: host1.amazonaws.com”。

相关内容