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

如何利用Postfix原生header_checks批量替换References头中的多个域名

如何用Postfix原生header_checks批量替换References头里的域名

刚好之前折腾过Postfix的邮件头替换,你的需求完全可以用原生功能实现,不用额外工具!

方法一:用Postfix内置的全局字符串替换(推荐,简单直接)

Postfix的重写规则里有个实用语法:${变量//匹配串/替换串},其中//代表全局替换(单个/仅替换第一次匹配内容)。

你只需在header_checks文件中添加这条规则:

/References:\s*(.*)/ REPLACE References: ${1//@domain-a.com>/@domain-b.com>}
  • 规则会先捕获References头里除开头References:和空白外的全部内容(即$1)
  • 对$1中所有的@domain-a.com>执行全局替换,替换为@domain-b.com>
  • 最终重组为符合要求的新References头

方法二:用PCRE类型的header_checks(适合复杂正则场景)

如果你的Postfix安装了PCRE支持(大部分Linux发行版可通过安装postfix-pcre包启用),还能借助PCRE的全局匹配修饰符g实现需求。

  1. 先修改main.cf配置,将header_checks指定为PCRE类型:
header_checks = pcre:/etc/postfix/header_checks.pcre
  1. 在/etc/postfix/header_checks.pcre中添加规则:
/(<[^>]+@domain-a.com>)/g REPLACE <${1/@domain-a.com/@domain-b.com}>
  • g修饰符会让Postfix匹配所有符合<xxx@domain-a.com>格式的内容,而非仅第一个
  • 每匹配到一个目标内容,就将其中的domain-a.com替换为domain-b.com,保留原有的<>格式

验证规则有效性

写完规则后,可通过以下命令快速测试:

postmap -q "References: <mail-1@domain-a.com> <mail-2@domain-a.com> <mail-3@domain-a.com>" pcre:/etc/postfix/header_checks.pcre

(若使用默认regex类型,将pcre:替换为regex:即可)

最后提醒:修改配置后需重启Postfix服务才能生效,且Postfix 2.10及以上版本对字符串替换的支持更稳定。

内容的提问来源于stack exchange,提问作者Linus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 12:44:10