Postfix配置求助:仅处理单个邮箱地址而非整个域的邮件,同时正确路由外发邮件
嗨,我来帮你搞定这个Postfix的配置问题!先理清楚你的核心需求:
- 只处理servicebot@example.com和servicebot@asriel.example.com这两个地址的邮件,转发到本地的davidw账户
- 所有其他外发邮件(比如发给johndoe@example.com的)都通过公司的Exchange服务器(outbound.example.com)转发,不要本地投递
- 本地账户(比如root、davidw)的邮件正常本地处理
问题根源分析
你之前尝试去掉$mydomain从mydestination列表,结果连servicebot@asriel.example.com的邮件都被转发了,原因很明确:Exchange转发过来的邮件,To字段是servicebot@example.com(从你提供的日志里能看到:to=<servicebot@example.com>, orig_to=<servicebot@asriel.example.com>),而Postfix的路由判断是基于To字段,不是orig_to。当$mydomain不在mydestination里时,Postfix会把servicebot@example.com当成外部地址,直接转发到relayhost了。
解决方案步骤
我们需要用**虚拟别名映射(virtual_alias_maps)**来精准指定要本地处理的地址,同时调整mydestination确保整个域不会被当成本地域:
调整
main.cf里的mydestination
把原来包含$mydomain的配置改成只保留本地主机和环回地址:mydestination = $myhostname, localhost.$mydomain, localhost这样Postfix就不会把整个
example.com当成本地域,所有非本地指定的邮件都会走relayhost。配置虚拟别名映射
在main.cf里添加或修改virtual_alias_maps配置:virtual_alias_maps = hash:/etc/postfix/virtual然后编辑
/etc/postfix/virtual文件,添加以下两行:servicebot@example.com davidw servicebot@asriel.example.com davidw这两行的作用是告诉Postfix:不管是发给这两个地址的邮件,都转发到本地的davidw账户。
生效配置
执行以下命令让别名映射生效,然后重启Postfix:postmap /etc/postfix/virtual systemctl restart postfix
验证效果
现在再测试:
- 发邮件到
servicebot@asriel.example.com或者servicebot@example.com,应该会被投递到本地davidw的邮箱,不会转发到relayhost - 从asriel.example.com发邮件到johndoe@example.com,会通过outbound.example.com转发,不会本地投递
- 本地账户(比如root)的邮件依然正常本地处理
这样就完美匹配你的需求啦!
备注:内容来源于stack exchange,提问作者David White

