Postfix虚拟域环境下,smtp_header_checks中应使用哪个虚拟域变量生成出站邮件头?
Postfix虚拟域环境下,smtp_header_checks中应使用哪个虚拟域变量生成出站邮件头?
首先明确说:$mydomain不是你要找的正确变量。
在你的虚拟域环境里,全局没配置mydomain的话,Postfix会自动用服务器主机名的域名部分来填充这个变量——它指向的是Postfix服务器自身的域名,和发送邮件的虚拟域完全无关,用它的话所有邮件的List-Unsubscribe都会指向同一个固定域名,不符合你按发送域动态生成的需求。
正确的解决方案:使用$sender_domain变量
$sender_domain是Postfix专门用来提取发件人地址中域名部分的内置变量,正好匹配你的场景——不管是虚拟域用户、CLI发送还是第三方应用(比如PHP/MSMTP)发的邮件,它都会自动获取发件人对应的域名。
具体配置步骤如下:
- 确保
main.cf里的smtp_header_checks配置正确:smtp_header_checks = regexp:/etc/postfix/smtp_header_checks - 编辑
/etc/postfix/smtp_header_checks,替换你之前的硬编码规则为:/^Content-Type:/i PREPEND List-Unsubscribe: mailto:unsubscribe@$sender_domain - 重载Postfix配置使生效:
postfix reload
测试验证
你可以用CLI发一封测试邮件验证效果:
echo "测试内容" | mail -s "动态头测试" test@example.com -r user@your-virtual-domain.tld
查看收到的邮件头,应该能看到List-Unsubscribe: mailto:unsubscribe@your-virtual-domain.tld,完美匹配发送域。
额外说明
这个方法的优势是覆盖所有出站邮件——不管邮件是从哪里发出来的,只要经过Postfix的SMTP处理流程,都会自动加上正确的List-Unsubscribe头,完全不需要修改应用或客户端代码,正好满足你的需求。
备注:内容来源于stack exchange,提问作者Jesse
相关产品推荐
相关产品推荐

