配置 Postfix,如果用户未知,则使用外部 MX 服务器传递本地邮件

配置 Postfix,如果用户未知,则使用外部 MX 服务器传递本地邮件

我有以下设置:

  • 配置了 postfix 的 Linux 机器负责 example.com 域名
  • 域的 MX 服务器已配置,因此发送到 example.com 的邮件将发送到 Google 邮件服务器
  • Linux 机器上存在多个用户账户(同一台机器还托管 example.com 网站)

当外部人员尝试向以@example.com 结尾的地址发送邮件时,该邮件会被路由到 Google 邮箱(并在那里进行适当处理)。

当 Linux 机器尝试向外界发送邮件时,邮件会被正确投递,因为反向 DNS 和 SPF 记录配置正确,所以 Linux 机器是 example.com 域(以及谷歌邮件服务器)的有效邮件发送者。

然而,问题就在这里。当 php 应用程序(托管在 Linux 机器上)尝试发送邮件到[电子邮件保护](并且 someuser 在 Linux 机器上不存在),它失败了,因为它甚至没有咨询谷歌邮件服务器,但 postfix smtp 本地得出结论“someuser”是未知的。

所以,问题是:如何告诉 postfix 将发送到 @example.com 域的邮件中继到 google 邮件服务器(因此,到 MX 记录中指定的服务器),当且仅当本地找不到邮箱时。

答案1

您是否需要 Postfix 服务器负责 example.com?(您是否希望将邮件发送到那里而不是 google?)如果您始终希望本地示例用户的邮件发送到他们的 google,请从 main.cf 中的 mydestination 参数中删除 $mydomain。这不会改变邮件对外部用户来说来自哪里。(这由“myorigin”控制)

由于 postfix 要么认为它对域负责,要么不负责,因此没有简单的方法可以拆分域,以便一些邮件在本地传递,一些邮件被传递到 google。您可以通过添加转发规则或传输映射来做一些技巧,但您需要为每个用户指定 google 或本地。我有点怀疑你真的想这么做。

答案2

您是否在 main.cf 中设置了“relayhost”?

以下是 main.cf 的一部分

myhostname = example.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = localhost
relayhost = googlemail.host

邮件发送至[电子邮件保护]将被转发至 googlemail.host

在 /etc/aliases 中,你可以为 root 用户提供别名以进行本地交付,例如

root: [email protected]

相关内容