Postfix配置咨询:含多域收件人的邮件网关路由规则实现
Postfix配置咨询:含多域收件人的邮件网关路由规则实现
你好Dub,你的需求完全可以通过Postfix的配置实现,而且完全不用拆分邮件流量——刚好你提到Gateway B也能处理domaina.com的收件人,这让方案的落地更顺畅了。
先纠正下你之前的transport map写法:Postfix不支持(abc.com + "*")这类语法,而且默认情况下,包含多域收件人的邮件会被拆分成单个收件人分别投递,这正是你想避免的情况。下面是具体的实现方案:
核心思路
我们要实现的逻辑是:
- 如果整封邮件的所有收件人都属于domaina.com,则路由到Gateway A
- 只要有一个收件人不属于domaina.com,整封邮件就全部路由到Gateway B(不拆分)
具体配置步骤
1. 修改Postfix主配置文件(main.cf)
添加或调整以下参数:
# 禁用多收件人邮件拆分,确保整封邮件用同一个网关投递 enable_multi_recipient_bounce = no multi_recipient_override = yes # 启用收件人权限检查,用来识别是否存在非domaina.com的收件人 smtpd_recipient_restrictions = # 保留你原有的其他规则(比如permit_mynetworks等) check_recipient_access hash:/etc/postfix/recipient_access permit_auth_destination reject_unauth_destination # 配置transport映射,处理纯domaina.com收件人的情况 transport_maps = hash:/etc/postfix/transport
2. 创建收件人权限检查文件(/etc/postfix/recipient_access)
这个文件用来触发「只要有非domaina.com收件人就走Gateway B」的规则:
# 匹配所有非domaina.com的收件人,强制使用Gateway B !domaina.com transport=smtp:gatewayB.example.com
3. 创建transport映射文件(/etc/postfix/transport)
处理所有收件人都是domaina.com的情况:
# 纯domaina.com收件人的邮件路由到Gateway A domaina.com smtp:gatewayA.example.com
4. 生成哈希表并重启Postfix
Postfix需要把文本配置转换成哈希表才能识别,执行以下命令:
postmap /etc/postfix/recipient_access postmap /etc/postfix/transport systemctl restart postfix
配置说明
enable_multi_recipient_bounce = no确保Postfix不会把多收件人邮件拆分成单个投递,整封邮件会统一使用同一个网关check_recipient_access会扫描所有收件人,只要发现任何一个不属于domaina.com,就强制设置transport为Gateway B,覆盖transport映射里的规则- 只有当所有收件人都是domaina.com时,才会使用transport映射里配置的Gateway A
这样就完全满足你的需求了:既不用拆分邮件流量,又能按规则路由到对应网关,而且Gateway B也能处理domaina.com的收件人,不会出现投递问题。
备注:内容来源于stack exchange,提问作者Dub Pankhurst
相关产品推荐
相关产品推荐

