Postfix 如何把所有邮件重定向到单个用户?

用 Postfix 的 virtual_alias_maps 把所有入站邮件重定向到一个用户或邮箱:编辑 main.cf、编写 /etc/postfix/virtual 通配规则、postmap 生效,并附排查与 FAQ。

最佳实践
Postfix 如何把所有邮件重定向到单个用户?封面

用 Postfix 的虚拟别名表(virtual alias map):在 main.cf 里指定 virtual_alias_maps = hash:/etc/postfix/virtual,然后在 /etc/postfix/virtual 里写一条通配规则把任意收件人映射到目标用户,最后 postmap 生成索引并 reload 即可。 这是测试环境收口邮件、防止误发外网的经典做法。

1. 修改 main.cf

sudo nano /etc/postfix/main.cf

添加(或修改)这一行:

virtual_alias_maps = hash:/etc/postfix/virtual

2. 编写虚拟别名规则

编辑 /etc/postfix/virtual,写入通配映射:

# 把发向本域任意收件人的邮件都转给 catchall 用户
@example.com    catchall
  • 左边 @example.com 匹配该域下任意收件地址;换成具体地址则只转那一条。
  • 右边可以是本机用户名,也可以是完整邮箱地址(如 ops@example.net,会再转发出去)。
  • 多个域要分别写一行,或用正则表(regexp:/etc/postfix/virtual_regexp)做更灵活的匹配。

3. 生成索引并生效

sudo postmap /etc/postfix/virtual
sudo systemctl reload postfix

postmap 会生成 virtual.db,Postfix 实际读取的是这个索引文件——每次改完 virtual 都必须重跑 postmap,否则不生效。

4. 验证与排查

  • 发一封测试邮件后用 tail -f /var/log/mail.log(Ubuntu/Debian)或 /var/log/maillog(RHEL/CentOS)观察投递路径。
  • postconf virtual_alias_maps 确认配置已被加载。
  • 注意:virtual alias 会影响所有匹配域的收件人,包括本已存在的本地账户;生产环境慎用全域通配。

观测云对照

邮件网关是业务链路的一环,重定向配置错误会导致"用户收不到邮件"这类投诉。把 Postfix 所在主机的 mail.log 通过 DataKit 采集到观测云,在日志查看器里按 to=<...>status= 过滤投递记录;再配一条监控器,对 status=bounced/deferred 数量设阈值告警,配置写错、队列堆积都能第一时间收到钉钉/企微通知。

常见问题(FAQ)

Q:能重定向到外部邮箱(如 Gmail)吗?
A:可以,virtual 文件右侧写完整外部地址即可。但注意你的 Postfix 必须有对外 relay 能力,否则会被对端拒收。

Q:改了 virtual 文件没生效?
A:九成是忘了 postmap /etc/postfix/virtual。Postfix 读的是 .db 索引,不是文本文件本身。

Q:想按收件人正则匹配转发怎么办?
A:把 virtual_alias_maps 指向 regexp: 类型的表,例如 virtual_alias_maps = regexp:/etc/postfix/virtual_regexp,文件里写正则到地址的映射。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台