基于目标 MX 记录的中继主机

Bin*_*uce 9 postfix

我希望设置 Postfix 以根据目标主机名使用外部中继,即:

  • 如果目标主机名是 *.outlook.com,请使用中继 some_smtp.example.com
  • 如果有任何其他目标主机名,请使用本地中继

我所说的目标主机名是从 MX 记录中获得的主机名。如果接收域有 MX 记录microsoft-com.mail.protection.outlook.com,则使用不同的中继

我知道可以根据发件人地址(使用sender_dependent_relayhost_maps)指定中继,但在我的情况下这是不切实际的。

目标是为挑剔的目标主机使用不同的中继:可能是 Mandrill,或另一个 Postfix 安装。

小智 6

您可以设置传输映射来选择性地选择具有@outlook.com目标地址的邮件并通过some_smtp.example.com如下所示的方式中继它们。

将下面的条目添加到 /etc/postfix/transport

outlook.com smtp:[some_smtp.example.com]
Run Code Online (Sandbox Code Playgroud)

将下面的条目添加到 /etc/postfix/main.cf

transport_maps = hash:/etc/postfix/transport
Run Code Online (Sandbox Code Playgroud)

执行以下命令后重启 postfix

sudo postmap /etc/postfix/transport
Run Code Online (Sandbox Code Playgroud)


mas*_*oeh 6

Arul 的答案非常适合基于收件人域的传输。但是,因为您指的是 MX 记录主机名而不是收件人域,答案不适用。

一种解决方案是使用check_recipient_mx_access. 来自官方文档的片段

check_recipient_mx_access类型:表

指定的 access(5) 数据库中搜索RCPT TO 域的 MX 主机,并执行相应的操作。注意:出于安全原因,不允许出现“OK”的结果。相反,使用 DUNNO 以从黑名单中排除特定主机。此功能在 Postfix 2.1 及更高版本中可用。

对于您的情况,只需放在check_recipient_mx_access hash:/etc/postfix/finickydestination适当的位置即可smtpd_*_restriction。在该文件中放置主机名

# /etc/postfix/finickydestination
.outlook.com FILTER smtp:[some_smtp.example.com]
Run Code Online (Sandbox Code Playgroud)

不要忘记 postmap 文件并执行 postfix reload。

参考):