如何查看 Postfix 的邮件队列大小?
postqueue -p 列出队列明细与总数;只看数量用 postqueue -p | tail -1 或 mailq;队列积压要查 mail 日志找卡信原因,postsuper 可清理。本文给出完整命令。
核心命令:postqueue -p——列出队列里每封信的 ID、大小、到达时间、收发件人,末尾有汇总行(共 K 封、总大小)。只看汇总:postqueue -p | tail -n 1。队列不为空时,重点不是"有多少",而是"为什么堵"。
查看命令
# 明细 + 汇总
postqueue -p
# 只看汇总行
postqueue -p | tail -n 1
# 输出示例:-- 10 Kbytes in 5 Requests.
空队列显示 Mail queue is empty。
队列堵了怎么办
1. 强制重投一遍
postqueue -f # flush,立即重试所有排队邮件
2. 查卡住的原因
tail -100 /var/log/mail.log # Debian/Ubuntu
tail -100 /var/log/maillog # RHEL/CentOS
常见原因:目标服务器拒收(550)、DNS 解析失败、灰名单(临时 450,会自动重试)、外发 25 端口被云厂商封禁。
3. 清理队列
sudo postsuper -d 队列ID # 删指定信
sudo postsuper -d ALL # 清空队列(⚠️ 全删)
sudo postsuper -d ALL deferred # 只清延迟队列
队列文件位置
队列物理上在 /var/spool/postfix/ 下的 active/deferred/hold 等子目录,但别手动删文件,一律用 postqueue/postsuper 工具操作。
观测云对照
邮件队列纳入指标监控。 队列长度是邮件服务健康的关键指标:用 DataKit 采集 mail.log 并通过 Pipeline 统计队列堆积、退信率;队列长度超过阈值(如 50 封)用监控器告警,避免退信风暴无人知晓。
常见问题(FAQ)
Q:队列里的信会重试多久?
A:默认 5 天(maximal_queue_lifetime),期间按退避策略重投,超期退回发件人。
Q:大量同一发件人的信积压?
A:可能是账号被盗发垃圾邮件或被恶意利用,先 hold(postsuper -h)再排查账户安全。
Q:hold 队列的信怎么恢复投递?
A:postsuper -H 队列ID 解除 hold,或 -H ALL 全部放回。