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

ker*_*ero 6 email-server postfix amazon-web-services amazon-ses

我们有一个设置,其中 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
Run Code Online (Sandbox Code Playgroud)

使用first_header_checks

/^From:(\s)?(.*)/i PREPEND X-Original-From: $2
/^To:(\s)?(.*)$/i PREPEND X-Original-To: $2
Run Code Online (Sandbox Code Playgroud)

第二个标头检查

/^From:(.*)/i REPLACE From: <no-reply@verified-domain.com>
Run Code Online (Sandbox Code Playgroud)

发件人_规范

/.*/    user@verified-domain.com
Run Code Online (Sandbox Code Playgroud)

发件人访问权限

/(.*)/  prepend Reply-To: <$1>
Run Code Online (Sandbox Code Playgroud)

这对于收到的邮件非常有效。user@external.com 将邮件发送到 me@verified-domain.com 并转发到 new@another-external.com

Reply-To: <user@external.com>
X-Original-To: <me@verified-domain.com>
To: new@another-external.com
From: <no-reply@verified-domain.com>
X-Original-From: <user@external.com>
Run Code Online (Sandbox Code Playgroud)

问题是,从服务器发出的邮件也会发生这种情况。假设 me@verified-domain.com 发送一封邮件,发件人被重写为无回复,并且将设置回复。我想解决这个问题。邮件标头应该只针对将要转发的传入邮件进行重写

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

Pet*_*bin 6

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

if !/^From:(.*)@verified-domain.com/i
/^From:(.*)/i REPLACE From: <no-reply@verified-domain.com>
endif
Run Code Online (Sandbox Code Playgroud)

您可以测试您的查找表,而无需实际发送如下内容:

peter@mail:~peter $ cat msgheaders
From: <peter@external.com>
To: new@another-external.com

peter@mail:~peter $ postmap -hmq - regexp:/etc/postfix/second_header_checks < msgheaders
From: <peter@external.com>     REPLACE From: <no-reply@verified-domain.com>

peter@mail:~peter $ cat msgheaders-1
From: <peter@verified-domain.com>
To: new@another-external.com

peter@mail:~peter $ postmap -hmq - regexp:/etc/postfix/second_header_checks < msgheaders-1
peter@mail:~peter $ 
Run Code Online (Sandbox Code Playgroud)