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

Postfix配置问题:如何将外发邮件本地保存而非转发?

Postfix配置问题:如何将外发邮件本地保存而非转发?

嘿,我来帮你捋捋这个问题!你的需求很明确——不管是 incoming 还是 outgoing 的邮件,都得通过自定义的 saveemail 脚本本地保存,但现在外发邮件却被 Postfix 当成远程邮件尝试转发,导致了“Relay access denied”的错误,而 incoming 邮件正常处理,对吧?

从你给出的配置和日志来看,问题根源在于 Postfix 对邮件路由的判断逻辑:目前你的 mydestination 只包含了本地主机和 localhost 相关的域名,当外发邮件的收件人域名不在这个列表里时,Postfix 会默认认为这是要发往外部的邮件,自然就会尝试转发,结果就触发了中继权限的报错。

下面给你两个实用的解决思路,你可以根据自己的实际场景选择:

方法一:强制所有邮件走 saveemail 传输(推荐)

这是最直接的方案,不管收件人是什么域名,都让 Postfix 调用你的自定义脚本处理,完全跳过转发逻辑。

  1. 打开 Postfix 的主配置文件 main.cf,添加或修改 transport_maps 配置项:
    transport_maps = hash:/etc/postfix/transport
    
  2. 创建 /etc/postfix/transport 文件,写入全局匹配规则:
    *    saveemail:
    
    这里的 * 代表匹配所有收件人地址,saveemail: 指定使用你已经定义好的自定义传输。
  3. 生成 transport 的哈希数据库文件(Postfix 需要这个才能识别规则):
    postmap /etc/postfix/transport
    
  4. 重启 Postfix 让配置生效:
    systemctl restart postfix
    

方法二:将外发目标域名加入本地投递范围

如果你的外发邮件都是针对固定几个域名的,也可以把这些域名加到 mydestination 里,让 Postfix 把它们当成本地邮件处理,再通过脚本保存。

比如你常发的域名是 example.com 和 test.org,修改 main.cf 里的 mydestination:

mydestination = $myhostname, localhost.$mydomain, localhost, example.com, test.org

改完后重启 Postfix 就行。不过这种方式只适合域名固定的场景,如果是任意域名的外发邮件,还是方法一更靠谱。

最后别忘了检查这个点

请确认你的 master.cf 文件里已经正确配置了 saveemail 传输的定义,比如类似这样的配置:

saveemail   unix  -       n       n       -       -       pipe
  flags=F user=yourusername argv=/path/to/your/saveemail.sh ${sender} ${recipient}

要保证脚本的路径正确,权限设置合理,Postfix 有执行它的权限。

你可以先试试方法一,应该能立刻解决外发邮件被转发的问题,之后查看 Postfix 日志确认所有邮件都触发了 saveemail 脚本就没问题啦。

备注:内容来源于stack exchange,提问作者Chika228

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 08:30:32