Postfix MX查找交付,而不是特定域的本地交付

在澄清我的问题之前,我需要解释当前的设置。

我们有一个可以接收邮件并将其存储在邮箱中的Postfix服务器。 我们的一些客户端有他们自己的Exchange服务器,但是我们仍然在我们的Postfix服务器上提供一个POP3框。 他们的域的DNS被设置为首先尝试将邮件传递到Exchange服务器,如果无法到达的话将邮件传送到我们的Postfix服务器。 如果邮件被传送到Postfix服务器,则邮件被存储在POP3帐户中。 当Exchange服务器重新联机时,它将使用POP-Locator读取POP3邮箱的内容,下载邮件并将其分发到Exchange服务器上的邮箱中。

这一切工作得很好。 因为在停电期间,客户仍然可以login到我们的networking邮件并阅读重要邮件。 这是我们想要保留的function。

但问题是,大多数客户端也在运行Postfix的服务器上托pipe他们的网站。 当在该服务器上运行的软件试图将邮件递送到其中一个客户端电子邮件地址时,其在本地递送。 我们想要的是Postfix使用MX查找来查看邮件应该发送到哪个服务器。

很长一段时间以来,我一直在想办法做到这一点。 我有Postfix的书,并通读它。 在互联网上查找了许多configuration示例和其他资源。

到目前为止,我一直在尝试使用transport_maps = hash:/etc/postfix/transport并在那里列出特定的域,运行postmap来重新生成查找表并执行postfix reload 。 无论我尝试做什么邮件都在本地交付。

为了添加更多的上下文,我们使用Courier,并在virtual_alias_maps = hash:/etc/postfix/virtual列出了所有的域。

任何帮助将非常感激。


/等/后缀/运输

 example.com smtp 

/等/后缀/虚拟

 example.com postmaster @example.com someuseraccount 

你发现很难做到的原因是它基本上是不可能的,因为它与Postfix采用的MTS模型相矛盾。 邮箱是本地或远程的; 他们不能兼而有之。 本地机器邮件的最终目的地 ,或者不是。 本地和虚拟域地址类是“最终目的地”,远程域(“中继”/“默认”)地址类不是。 单个邮箱的最终目的地不能是本地计算机上的maildir,也不能是远程传输到其他计算机。 它必须是一个或另一个。 域是本地/托pipe域,在这种情况下,该域中邮箱的邮件被传递到本地maildir以供POP3或远程邮箱接收,在这种情况下,该域中邮箱的邮件被传输到另一个邮箱机器,而不是本地交付。

你唯一真正的select是运行两个单独的MTS – 两个不同的Postfix实例 。 一个向整个Internet提供SMTP中继服务,并将相关域configuration为本地托pipe的虚拟域,并将所有邮件发送到maildir,以便随后通过POP3进行检索。 另一个提供了sendmailpostdrop和本地SMTP提交服务,并且将相关域configuration为远程托pipe的中继域,其邮件将被传输到Exchange服务器。

Précis:邮件有两个截然不同的“纸张path”需要有两个MTS实例。

请显示/ etc / postfix / transport文件的内容。 我不可能知道这个文件是否正确。

另外,请澄清…你是否希望postfix试图为这些域的MX交付,只有当它失败,然后本地交付?


感谢您的额外信息。

你想做什么是非常棘手的,甚至可能不是直接可能的。 我认为最简单的方法是运行两个postfix实例。 有关详细信息,请参阅http://www.postfix.org/MULTI_INSTANCE_README.html

您可以configuration一个postfix实例来接受来自世界的邮件,并将邮件发送到本地邮箱进行POP3检索等。

另一个实例将接收来自本地进程的邮件,然后尝试通过MX进行传递 – 甚至可能传递给第一个后缀实例。

在第二个例子中,您将禁用master.cf中的smtp服务,以使两个实例都不尝试侦听端口25.有关所有详细信息,请阅读上面的链接。

我希望这有帮助!