如何配置Postfix在收件人邮箱已满时立即退回邮件
如何配置Postfix在收件人邮箱已满时立即退回邮件
嗨,这个需求我之前帮不少运维同学处理过~默认情况下,Postfix会把收件人邮箱满(返回452-4.2.2 The recipient's inbox is out of storage space这类临时错误)的邮件放到延迟队列,重试整整5天才会退回给发件人。不过咱们可以通过配置,让这类邮件直接退回,不用等这么久。
下面是两种可行的方法,你可以根据自己的需求选择:
方法一:精准匹配邮箱满的错误,转为永久错误(推荐)
这个方法只针对“邮箱已满”的场景,不会影响其他需要重试的软错误(比如对方服务器临时宕机),是最稳妥的方案:
- 先创建一个Postfix的回复过滤规则文件,比如
/etc/postfix/smtp_reply_filters,写入以下内容:
/^452-4\.2\.2 The recipient's inbox is out of storage space/ 552 5.2.2 The recipient's inbox is out of storage space
它的作用是把远程服务器返回的452临时错误,替换成552永久错误——Postfix收到永久错误就不会再重试,直接把邮件退回给发件人。
- 用Postfix的工具编译这个规则文件(必须执行这一步,否则Postfix无法识别规则):
postmap /etc/postfix/smtp_reply_filters
- 编辑Postfix的主配置文件
/etc/postfix/main.cf,添加或修改以下参数:
smtp_reply_filter = pcre:/etc/postfix/smtp_reply_filters
- 最后重启Postfix让配置生效:
# 适用于systemd系统(如Ubuntu 16.04+、CentOS 7+) systemctl restart postfix # 老版本系统用service命令 service postfix restart
方法二:全局缩短队列邮件的生命周期(不推荐)
如果你想让所有延迟队列的邮件都立即退回(会影响其他合理的重试场景,比如对方服务器临时不可用),可以修改以下两个参数:
- 编辑
/etc/postfix/main.cf,添加或修改:
# 邮件在退回队列的最长存活时间,设为0表示立即处理 bounce_queue_lifetime = 0s # 邮件在队列中的总最长存活时间,设为0表示不等待直接退回 maximal_queue_lifetime = 0s
- 同样重启Postfix使配置生效:
systemctl restart postfix # 或者 service postfix restart
优先推荐方法一,既能解决你的问题,又不会破坏其他正常的邮件重试逻辑。
备注:内容来源于stack exchange,提问作者Deckard
相关产品推荐
相关产品推荐

