将“from”重写为特定的“to”地址

我们有一个设置,后缀通过亚马逊SES中继发送邮件。 除了电子邮件转发,所有工作都很好。

虽然这个话题至less已经在这里和这里讨论过了 ,但还是有一些我无法理解的地方。

问题是Amazon SES不会发送电子邮件,其中From:未validation。 所以当一个内部地址要转发到外部,并且发送者也是外部的,邮件将不会被发送。

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

 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] 

sender_access

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

这对收到的邮件很有用。 [email protected]将邮件发送至[email protected],并将其转发至[email protected]

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

这个问题,这也发生从服务器的传出邮件。 说我[email protected]发送一封邮件,将从重写到不答复和回复将被设置。 这我想修复。 邮件标题只能被重写的传入邮件将被转发

我曾尝试使用正则expression式,如!/^From:(\s)?(.*@verified-domain\.com)/但到目前为止没有运气。

Postfix 2.1及以上版本支持regexpcre表格中的条件运算符。 在你的情况下,使用这些条件的second_header_checks应该是这样的:

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

你可以testing你的查询表,而不用实际发送这样的东西:

 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 $ 

我试图做一些非常类似于这个不同的电子邮件服务,我怎么解决它(得到这个线程的帮助之后):

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

祝你好运哟,如果你需要更多的细节,我可以尝试和帮助。