在 Postfix 中有条件地重写发件人和回复邮件头

在 Postfix 中有条件地重写发件人和回复邮件头

我在 Amazon AWS 上运行了一个 Web 应用程序,它使用 Amazon SES 发送电子邮件。我真正希望这个系统能够做的一件事是能够将电子邮件转发到任何发件人的特定地址,例如,如果某个随机的人发送电子邮件[电子邮件保护]然后我希望它转发到我的个人电子邮件地址。

我尝试使用别名执行此操作,但由于 Amazon SES 中的限制,它不允许我发送未经验证的发件人的邮件,因此它不起作用。如果我发送电子邮件,它就可以正常工作[电子邮件保护]来自已经验证的电子邮件地址,但如果我从未经验证的地址发送电子邮件则不会。

因此,我想尝试重写发送到[电子邮件保护](以及其他地址,例如[电子邮件保护])。我想将原始的“发件人”标题移动到“回复至”标题,然后将“发件人”标题更改为[电子邮件保护](或类似内容)。例如:

From: "Bruce Wayne" <[email protected]>
To: "MySite Support" <[email protected]>

会成为

From: "Mail Services" <[email protected]>
Reply-To: "Bruce Wayne" <[email protected]>
To: "MySite Support" <[email protected]>

我有[电子邮件保护]在别名文件中定义,并将其转换为我的个人电子邮件。我不确定别名内容会受到 header_checks 或解决此问题所需的任何内容的影响。

还有一个 catchall 别名,可以将其他电子邮件发送到我的网络应用程序,因此整个标题重写内容实际上只是我上面描述的非常具体的地址所需要/想要的。

使用正则表达式重写单个标头似乎很简单,但我不确定的是

  1. 根据 To 头的地址进行条件重写
  2. 根据 From 标头的值重写 Reply-To 标头。

有人能给我一些关于如何处理这两个问题的指点吗?或者,如果我以错误的方式看待这个问题,任何指导都将不胜感激。

更新 - 我不知怎么地错过了 header_checks 中的 if/endif 语句。我试图做这样的事情,但我的 header 检查似乎没有做任何事情:

if /^To: ([email protected]|[email protected])/
/^From:(.+@.+).*$/ PREPEND Reply-To:$1
/^From:(.+@.+).*$/ REPLACE From: [email protected]
endif

我在 main.cf 中添加了以下行:

header_checks = pcre:/etc/postfix/header_checks

不清楚我是否应该对这个文件进行后期映射。我试过这样做和不这样做,但没有什么区别。

我在这里做错什么了吗?

答案1

IF 模式与 IF 和 ENDIF 之间的其他模式匹配同一行,因此您不能在语句中混合 To: 和 From: 标头。请参阅 header_checks(5) 手册页中的 BUGS。

答案2

虽然我还没有测试过您的具体设置,但我很确定 To 正则表达式应该匹配完整标头。也就是说,在我看来,您只匹配了存在裸电子邮件地址的情况。如果您想匹配,则必须使用:'To: "MySite Support" <[email protected]>'

if /^To:.*([email protected]|[email protected])/

或者一些更复杂的东西来排除“[电子邮件保护]“等等。

相关内容