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

如何在Postfix中根据信封收件人(ENVELOPE TO)设置信封发件人(MAIL FROM)

如何在Postfix中根据信封收件人(ENVELOPE TO)设置信封发件人(MAIL FROM)

嘿,我来帮你搞定这个Postfix的配置难题!你的需求很明确——只要邮件的信封收件人是nasty@example.com,不管原信封发件人是什么,都强制改成james@bond.com,而且不能碰邮件头,同时兼容本地和外部来源的邮件。

之前你试过的smtp_generic_maps和sender_canonical_maps确实不适用,因为它们都是基于原始发件人地址来做替换的,而我们要的是基于收件人地址触发发件人替换,得用另一种配置方式:

具体步骤:

  1. 编辑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
    # 保留你原本的其他规则
  1. 创建收件人-发件人映射文件/etc/postfix/recipient_sender_override,写入规则:
nasty@example.com    sender_override james@bond.com
  1. 生成Postfix需要的哈希映射文件:
postmap /etc/postfix/recipient_sender_override
  1. 重启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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 12:23:03