Postfix 修改队列中的电子邮件并重新注入

Postfix 修改队列中的电子邮件并重新注入

我有一个旧版 Web 应用程序,它将邮件发送到外部 SMTP(由 conf 文件指定)。这些电子邮件来自“noreply”帐户,并已正确发送。现在,我们希望邮件来自“[电子邮件保护]“但不幸的是无法修改应用程序。从网站上,我们可以识别登录的用户,但我们无法在发送之前设置它。所以我们必须在邮件到达外部 SMTP 之前拦截它们。为此,我们配置了一个本地 Postfix 来替代外部 SMTP。它必须接受邮件,更改发件人(新发件人将在主题中的一些特殊字符之间)并将邮件重新路由到官方的外部 SMTP。所有邮件都有附件(doc/pdf 文件)。有没有直接的命令/方法可以做到这一点?

从高层次上讲,我想到的解决方案基于:保存队列、发布消息、通过脚本更改发件人、通过 mail/mailx 命令发送邮件。谢谢。

答案1

大概您想更改信封发件人地址以及电子邮件标题中的“发件人:”地址?

第一部分很简单——基本上就是传出 SMTP 邮件的通用地址映射

您需要定义一个通用地址映射main.cf,然后使用所需的地址转换创建实际的地址映射文件。

 /etc/postfix/main.cf:
    smtp_generic_maps = hash:/etc/postfix/generic

/etc/postfix/generic:
    [email protected]        [email protected]

要修改电子邮件标题“发件人:”,您需要标头检查http://www.postfix.org/header_checks.5.html)我强烈推荐阅读过滤器自述文件看看是否有“更好”的方法来做到这一点,并了解它在消息流中可以发生的位置,但这是更改消息标题的基本方法。

在这里,您定义了一个 header_checks 映射main.cf,然后使用header_checksREPLACE 动词和新文本创建实际的映射文件。PCRE 映射是一种正则表达式格式,因此您可以使用它来匹配需要替换的文本(而不是确切的文本)- 在示例中,它将匹配包含“错误”发件人地址的 From: 字段(以及该字段中的任何其他文本),并用新文本替换整个字段。

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

/etc/postfix/header_checks: 
    /^From:.*noreply@localdomain\.local.*/ REPLACE From: "Some Name" <[email protected]>

记住postmap您创建的任何新地图文件!

答案2

我建议使用
postfix 队列后过滤器作为“postfix 特定”解决方案
或者
基于 milter 的非后缀特定修复(例如基于 MIMEDefang.org milter)

Postfix 队列后内容过滤器


操作原理
队列后内容过滤器从 Postfix 接收未过滤的邮件(如下所述),并可以执行以下操作之一:
1. 将邮件重新注入 Postfix,或许在改变内容之后和/或目的地。...
内容
过滤器可以是一个简单的 shell 脚本,如下所示:
...
访问或标题/正文表中的 FILTER 操作

相关内容