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

Adr*_*age 9 email postfix smtp-headers

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

到目前为止一切顺利,但我有三个用户都使用电子邮件服务提供商,并且所有三个用户的邮件信封中的发件人都设置为“mailer@infusionmail.com”,并且唯一包含实际用户电子邮件的地方地址在From: email header 中

我对使用From: 电子邮件标头的安全性(或缺乏安全性)感到满意,因为我只转发发送到严格控制的特定电子邮件地址的邮件,但我非常感谢您提供有关如何操作的建议最好根据From: header的值指定中继主机。有没有办法将包络值设置为与 From 字段相同?或者任何其他方式来做到这一点?

mas*_*oeh 5

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

首先在main.cf和它的pcre表中定义header_checks

#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]
Run Code Online (Sandbox Code Playgroud)

好的,现在我们在 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
Run Code Online (Sandbox Code Playgroud)

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

[hostX.example.com]   userX:passwordX
Run Code Online (Sandbox Code Playgroud)

免责声明: