将“发件人”重写为特定的“收件人”地址

将“发件人”重写为特定的“收件人”地址

我们有一个设置,其中 postfix 通过 Amazon SES 中继发送邮件。除电子邮件转发外,一切正常。

虽然这个话题至少已经讨论过了这里这里,还有一些点我无法理解。

问题是,Amazon SES 不会发送From:未经验证的电子邮件。因此,当内部地址想要转发到外部地址并且发件人也是外部地址时,邮件将无法发送。

为了解决这个问题,我们目前在 main.cf 中使用以下配置

header_checks = regexp:/etc/postfix/first_header_checks
smtp_header_checks = regexp:/etc/postfix/second_header_checks
sender_canonical_maps = regexp:/etc/postfix/sender_canonical
sender_canonical_classes = envelope_sender
smtpd_data_restrictions = check_sender_access pcre:/etc/postfix/sender_access

使用 first_header_checks

/^From:(\s)?(.*)/i PREPEND X-Original-From: $2
/^To:(\s)?(.*)$/i PREPEND X-Original-To: $2

second_header_checks

/^From:(.*)/i REPLACE From: <[email protected]>

sender_canonical

/.*/    [email protected]

发件人访问

/(.*)/  prepend Reply-To: <$1>

这对于收到的邮件非常有用。[电子邮件保护]发送邮件至[电子邮件保护]并转发至[电子邮件保护]

Reply-To: <[email protected]>
X-Original-To: <[email protected]>
To: [email protected]
From: <[email protected]>
X-Original-From: <[email protected]>

问题是,这也发生在从服务器发出的邮件上。比如说[电子邮件保护]发送邮件时,发件人将被重写为无回复,并将设置回复。我想修复这个问题。邮件标题只应对将要转发的来信进行重写

我曾尝试使用类似的正则表达式!/^From:(\s)?(.*@verified-domain\.com)/,但到目前为止还没有成功。

答案1

Postfix 2.1 及更高版本支持regexpcre表中的条件运算符。 在你的情况下,second_header_checks使用这些条件应该如下所示:

if !/^From:(.*)@verified-domain.com/i
/^From:(.*)/i REPLACE From: <[email protected]>
endif

您可以测试查找表而不需要实际发送任何如下内容:

peter@mail:~peter $ cat msgheaders
From: <[email protected]>
To: [email protected]

peter@mail:~peter $ postmap -hmq - regexp:/etc/postfix/second_header_checks < msgheaders
From: <[email protected]>     REPLACE From: <[email protected]>

peter@mail:~peter $ cat msgheaders-1
From: <[email protected]>
To: [email protected]

peter@mail:~peter $ postmap -hmq - regexp:/etc/postfix/second_header_checks < msgheaders-1
peter@mail:~peter $ 

答案2

我试图用不同的电子邮件服务做与此非常相似的事情,下面是我解决问题的方法(从这个帖子中得到很多帮助后):

  1. 设置传输图,将下一跳设置为外部目标示例的本地运行的 smtp 守护程序:[email protected] smtp:localhost:9999
  2. 将新的本地运行的 smtp 守护进程添加到 master.cf,将标头检查、规范映射和 canonical_classes 仅应用于此守护进程
  3. 在本地运行的守护进程上使用 content_filter 指向外部目标的 mx 服务器。我的看起来像这样 -o content_filter=smtp:[mx.somedomain.com]:25
  4. 您可能需要修改本地运行的守护程序上的 smtpd_recipient_restrictions,以允许它充当中继。例如:( -o smtpd_recipient_restrictions=permit_mynetworks,defer 这可能不是理想的选择,在推送直播之前请仔细检查安全策略)

祝你好运,如果你需要更多详细信息,我可以尽力提供帮助。

相关内容