You need to enable JavaScript to run this app. 如何配置Postfix+Dovecot不提前拒收收件人不存在邮件,交由Milter校验
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Postfix+Dovecot不提前拒收收件人不存在邮件,交由Milter校验

解决方案

核心逻辑说明

你当前遇到的提前拒收问题,根源是Postfix默认会在SMTP会话的收件人校验阶段,对照virtual_mailbox_maps检查虚拟域收件人是否存在,不存在就直接返回550错误,邮件根本不会流转到Milter环节。我们只需要关闭SMTP阶段的收件人存在性校验,仅保留域名合法性校验避免成为开放中继,即可让所有托管域名的入站邮件都交给Milter处理。


配置修改步骤

1. 调整Postfix main.cf配置

在你现有配置基础上添加/修改以下参数:

# 关闭SMTP阶段对未列出入局收件人的自动拒收逻辑
smtpd_reject_unlisted_recipient = no

# 显式指定收件人限制规则,仅拒收非你托管的域名邮件,不校验用户是否存在
smtpd_recipient_restrictions =
    permit_mynetworks,
    permit_sasl_authenticated,
    reject_unauth_destination

# 明确指定Milter使用V2版本协议
milter_protocol = 2

# 可选:Milter服务故障时的默认动作,可按需调整为tempfail/accept/reject
milter_default_action = tempfail

注意:不要删除/注释virtual_mailbox_domains配置项,这是reject_unauth_destination规则生效的基础,可避免你的服务器成为开放中继被滥用。virtual_mailbox_maps也可以保留,供Milter校验通过后的邮件投递阶段查询用户信息使用。

2. 重载Postfix配置

执行命令生效配置:

postfix reload

效果验证

向你托管域名下一个不存在的收件人发送测试邮件,Postfix不会直接返回550错误,而是会将邮件完整转发给你的Milter处理,你可以在Milter中自行校验收件人有效性,无效时按PEC标准生成对应回执即可。

Dovecot侧无需额外调整,你现有的allow_all_users=yes配置已经可以避免极端情况下LMTP阶段提前拒收的问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 02:45:05