我已成功设置 Postfix 使用 SASL 和sender_dependent_relayhost_maps
MySQL 表通过 Mandrill 中继电子邮件,以便不同的发件人使用他们自己的 Mandrill 用户名和 API 密钥连接到 Mandrill。
到目前为止一切顺利,但我有三个用户都使用电子邮件服务提供商,并且邮件信封中的发件人设置为“[电子邮件保护]“,并且唯一包含实际用户电子邮件地址的地方是发件人:电子邮件标题。
我对使用发件人:电子邮件标题因为我只转发发送到严格控制的特定电子邮件地址的邮件,但我真的很感激关于如何根据发件人: 标题。有没有办法将信封值设置为与发件人字段相同?或者还有其他方法可以做到这一点?
答案1
根据 postfix 邮件列表上的这个主题:通过 sendmail(1) 引入的所有邮件的传输方式不同,看来您的情况是可行的。不幸的是,您不能只依赖两个表sender_dependent_relayhost_maps
和smtp_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
免责声明:
- 的哈希表
smtp_sasl_password_maps
仅作为示例。您可以将其替换为mysql表。 - 您还可以在 MySQL 中用 SELECT 和 REGEXP 的组合替换 header_checks 的 pcre 表。但是它可能会杀死你的数据库,因为 postfix 会攻击 MySQL每个标题行
答案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]