有条件地在Postfix中重写From和Reply-To头

我有一个在亚马逊AWS上运行的Web应用程序,它使用Amazon SES发送电子邮件。 我真正希望这个系统做的事情之一是能够发送电子邮件到任何邮寄的人的某些地址,例如,如果一些随机的人的电子邮件[email protected]那么我希望它转发到我的个人电子邮件地址。

我试图用别名做到这一点,但由于亚马逊SES中的限制,这不允许我从未经validation的发件人发送邮件。 如果我通过validation的电子邮件地址发送电子邮件至[email protected],但如果我通过未经validation的地址发送电子邮件,则工作正常。

所以,我想要做的就是在任何发送到[email protected]的邮件(以及其他地址,如[email protected])上重写From和Reply-To标头。 我想将原始的From头移到Reply-To头,然后将From头改为[email protected](或类似的东西)。 例如:

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]> 

我在别名文件中定义了[email protected],并将其转换为我的个人电子邮件。 我不确定别名的东西会受到header_checks的影响,或者解决这个问题需要的东西。

还有一个catchall别名发送其他电子邮件到我的web应用程序,所以这整个头重写的东西是真正的东西,我只需要/非常特定的地址需要如上所述。

使用regexp重写一个头文件似乎很简单,但是我不确定的东西在这里

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

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

更新 – 我不知何故,如果在header_checks / endif语句。 我试图做这样的事情,但我的头检查似乎没有做任何事情:

 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 

目前还不清楚我是否应该后映射此文件。 我尝试了这样做,而不是这样做,没有任何区别。

有什么明显的,我在这里做错了吗?

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

虽然我没有testing你的具体设置,但我很确定To正则expression式应该匹配完整的头文件。 也就是说,在我看来,你只是匹配那些没有电子邮件地址的情况。 如果您想匹配'To: "MySite Support" <[email protected]>' ,那么您将不得不使用:

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

或者更复杂一些,排除“[email protected]”等。