我需要将邮件从一个 Postfix 服务器转发(中继)到另一个,以便它们可以使用与原始邮件相同的地址进行“应答”。此外,我需要将来自服务器 2 上的帐户的所有邮件(这些邮件发往服务器 2 上的其他帐户)在本地传递,而所有其他邮件应中继到实际上是邮件集群的第三台服务器。
因此,是这样的:
- 邮寄[电子邮件保护]转到 cluster.other.dom
- cluster.other.dom 认为应该将其转发到 mail.my.dom,其中 postfix 服务器 1 将所有邮箱作为虚拟邮箱
- mail.my.dom 检查其传输/虚拟/别名,发现应将其中继到 mail2.my.dom,其中 postfix 服务器 2 仅具有一些邮箱,并接受两个域中一些用户的邮件:my.dom 和 mail2.my.dom
- mail2.my.dom 找到[电子邮件保护]以本地用户身份接受消息
这部分确实有效,问题出在其他方面......例如:
- [电子邮件保护]mail2.my.dom 想要本地发送邮件至[电子邮件保护]或者[电子邮件保护]它也位于 mail2.my.dom - postfix 仅在以下情况下接受它:mydestination=本地主机
- [电子邮件保护]mail2.my.dom 想要发送邮件至[电子邮件保护]位于 mail.my.dom(第一个 postfix 服务器)上 - mail2.my.dom(第二个服务器)上的 postfix 查看了它的表格,但找不到[电子邮件保护]并返回“用户未知” - 但是,它应该将邮件转发回 cluster.other.dom 或 mail.my.dom (第一台服务器)
- [电子邮件保护]位于 mail2.my.dom 的服务器接收来自[电子邮件保护]但当他试图回复时,[电子邮件保护]- 不像[电子邮件保护]。由于 mail2.my.dom 在网络上不可见(它是内部的,只能通过 VPN 访问),因此[电子邮件保护]尝试去[电子邮件保护]由于 mail2.my.dom 无法访问,MX 也无法访问,因此失败
现在,最大的问题是我无法实现非本地用户的中继 - 我尝试了所有能找到的解决方案(其中大多数都已经 5 年多了),但都不起作用。要么没有中继,要么所有内容都中继到集群(这当然也是错误的)。
这真的可能吗?要让 postfix 检查其本地地图/数据库,如果找不到用户,只需通过中继服务器发送,而无需任何地址重写、替换等(这意味着[电子邮件保护]不会成为[电子邮件保护])?
为了进一步说明,我仅定义了有关虚拟*的内容:
virtual_transport = procmail
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
两个邮件域(my.dom 和 mail2.my.dom)都在虚拟邮箱域中,并且两个域中的所有用户都在虚拟邮箱映射中,并且他们所有用户在虚拟别名映射中都有与其电子邮件相同的别名。
我不知道我是否把它弄得太复杂/难以理解,如果是这样的话我很抱歉,但我需要尽可能清楚地说明情况,然后才能最终提供更多细节。
我的 main.cf 的一部分:
mydestination = localhost
myhostname = mail2.my.dom
mynetworks = 127.0.0.0/8 [::1]/128
myorigin = /etc/mailname
relayhost = [cluster.other.dom]
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_transport = procmail
smtpd_reject_unlisted_recipient = no
smtpd_reject_unlisted_sender = no
谢谢。