![Postfix:邮件已在本地传送,但我希望通过中继主机传送](https://linux22.com/image/621820/Postfix%EF%BC%9A%E9%82%AE%E4%BB%B6%E5%B7%B2%E5%9C%A8%E6%9C%AC%E5%9C%B0%E4%BC%A0%E9%80%81%EF%BC%8C%E4%BD%86%E6%88%91%E5%B8%8C%E6%9C%9B%E9%80%9A%E8%BF%87%E4%B8%AD%E7%BB%A7%E4%B8%BB%E6%9C%BA%E4%BC%A0%E9%80%81.png)
我工作在例子.net:-) 我的团队的服务器名为tardis.example.net。发送给我们的任何邮件都必须首先通过我们公司的内部中继主机。尽管邮件正确地传递到我们的服务器,但收件人地址会被重写为:
[email protected]
到:
[email protected]
因此,我们的默认 Postfix(2.6.6)配置拒绝传递消息:
Nov 27 15:49:23 tardis postfix/qmgr[10564]: B6CC73FA22:
from=<[email protected]>, size=3953, nrcpt=1 (queue active)
Nov 27 15:49:24 tardis postfix/smtp[10580]: B6CC73FA22: to=<[email protected]>,
orig_to=<[email protected]>,
relay=outbound.example.net[172.30.113.194]:25,
delay=0.71, delays=0.47/0.01/0.14/0.1, dsn=5.1.1, status=bounced
(host outbound.example.net[172.30.113.194] said:
550 5.1.1 <[email protected]>... User unknown (in reply to RCPT TO command))
我的解决方案是将 main.cf 从以下内容进行更改:
myhostname = tardis.example.net
mydomain = example.net
mydestination = $myhostname, localhost.$mydomain, localhost
更改为:
myhostname = tardis.example.net
mydomain = example.net
mydestination = $myhostname, $mydomain, localhost.$mydomain, localhost
这很好用;通过接受 $mydomain 的邮件,tardis.example.net 现在即使收件人更改为[电子邮件保护]
但问题是,从我们的服务器发往 @example.net 的所有外发邮件现在都被视为本地邮件。Postfix 不会将其转发到 $relayhost (outbound.example.net),而是尝试将其发送给 tardis.example.net 上的本地用户。
我如何配置我们的服务器以接受传入的@example.net 邮件,但将所有传出邮件发送到 $relayhost(可能的例外是发往@tardis.example.net 的传出邮件,这是唯一应在本地传递的邮件)?
我查看了有关邮件中继的常见问题解答和文档中的各种与中继相关的选项,但找不到任何可以帮助我的东西。
如果您需要更多配置信息,我很乐意提供。感谢所有能提供帮助的人。
答案1
啊!是的,Ismooth,你说得对——我没有意识到to
和orig_to
行之间的差异来自 Postfix,而不是上游邮件主机。在这种情况下,公司加载到我们服务器上的 Postfix 标准发行版包含以下行:
masquerade_domains = example.net
当然,它去掉了“tardis”部分,变成[email protected]
了[email protected]
。
解决方案是删除该行,然后从mydestination
指令中删除 $mydomain。问题解决了。谢谢帮助!