Postfix:根据发件人:邮件头而不是信封发件人选择中继主机

Postfix:根据发件人:邮件头而不是信封发件人选择中继主机

我已成功设置 Postfix 使用 SASL 和sender_dependent_relayhost_mapsMySQL 表通过 Mandrill 中继电子邮件,以便不同的发件人使用他们自己的 Mandrill 用户名和 API 密钥连接到 Mandrill。

到目前为止一切顺利,但我有三个用户都使用电子邮件服务提供商,并且邮件信封中的发件人设置为“[电子邮件保护]“,并且唯一包含实际用户电子邮件地址的地方是发件人:电子邮件标题

我对使用发件人:电子邮件标题因为我只转发发送到严格控制的特定电子邮件地址的邮件,但我真的很感激关于如何根据发件人: 标题。有没有办法将信封值设置为与发件人字段相同?或者还有其他方法可以做到这一点?

答案1

根据 postfix 邮件列表上的这个主题:通过 sendmail(1) 引入的所有邮件的传输方式不同,看来您的情况是可行的。不幸的是,您不能只依赖两个表sender_dependent_relayhost_mapssmtp_sasl_password_maps。您需要修改master.cf。这个想法是使用header_checks将电子邮件路由到不同的传输。然后在每个传输中,我们定义使用独立凭据和中继主机的 smtp 客户端。

首先在main.cf中定义header_checks及其pcre表

#main.cf
header_checks = pcre:/etc/postfix/header_dependent_relay

#/etc/postfix/header_dependent_relay

/^From:.*specialsender1\@example\.com/       smtp1:[host1.example.com]
/^From:.*specialsender2\@example\.com/       smtp2:[host2.example.com]
/^From:.*specialsender3\@example\.com/       smtp3:[host3.example.com]

好,现在我们在 master.cf 中设置smtp1、、smtp2传输smtp3

#master.cf
smtp1    unix  -       -       -       -       10       smtp
    -o smtp_sasl_password_maps=hash:/etc/postfix/smtp1.relay
smtp2    unix  -       -       -       -       10       smtp
    -o smtp_sasl_password_maps=hash:/etc/postfix/smtp2.relay
smtp3    unix  -       -       -       -       10       smtp
    -o smtp_sasl_password_maps=hash:/etc/postfix/smtp3.relay

文件smtpX.relay具有类似内容,例如

[hostX.example.com]   userX:passwordX

免责声明:

答案2

这对我来说有一个变化:需要在标头相关_中继文件:

#/etc/postfix/header_dependent_relay

/^From:.*specialsender1\@example\.com/       FILTER smtp1:[host1.example.com]
/^From:.*specialsender2\@example\.com/       FILTER smtp2:[host2.example.com]
/^From:.*specialsender3\@example\.com/       FILTER smtp3:[host3.example.com]

http://www.postfix.org/header_checks.5.html

相关内容