如何在Postfix中根据信封收件人(ENVELOPE TO)设置信封发件人(MAIL FROM)
如何在Postfix中根据信封收件人(ENVELOPE TO)设置信封发件人(MAIL FROM)
嘿,我来帮你搞定这个Postfix的配置难题!你的需求很明确——只要邮件的信封收件人是nasty@example.com,不管原信封发件人是什么,都强制改成james@bond.com,而且不能碰邮件头,同时兼容本地和外部来源的邮件。
之前你试过的smtp_generic_maps和sender_canonical_maps确实不适用,因为它们都是基于原始发件人地址来做替换的,而我们要的是基于收件人地址触发发件人替换,得用另一种配置方式:
具体步骤:
- 编辑Postfix的主配置文件
main.cf,找到smtpd_recipient_restrictions配置段,添加check_recipient_access规则(注意要放在合适的位置,比如在permit_mynetworks之后、reject_unauth_destination之前):
smtpd_recipient_restrictions = permit_mynetworks check_recipient_access hash:/etc/postfix/recipient_sender_override reject_unauth_destination # 保留你原本的其他规则
- 创建收件人-发件人映射文件
/etc/postfix/recipient_sender_override,写入规则:
nasty@example.com sender_override james@bond.com
- 生成Postfix需要的哈希映射文件:
postmap /etc/postfix/recipient_sender_override
- 重启Postfix服务使配置生效:
# 对于systemd系统 systemctl restart postfix # 对于SysVinit系统 service postfix restart
原理说明:
check_recipient_access会在邮件接收阶段检查信封收件人地址,当匹配到nasty@example.com时,触发sender_override动作——这个动作会直接替换信封里的MAIL FROM字段,完全不会改动邮件头中的发件人信息,完美符合你的要求。而且不管邮件是本地用户提交的,还是外部SMTP服务器发来的,都会经过这个规则检查,覆盖所有场景。
如果之后需要添加其他收件人的规则,直接在recipient_sender_override文件里加新行,重新执行postmap并重启Postfix就可以了。
备注:内容来源于stack exchange,提问作者user10732
相关产品推荐
相关产品推荐

