You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 09:44:34