Postfix 运维要点
自建邮件服务器的日常运维基本围绕队列与日志两件事:邮件积压看 mailq 或 postqueue -p,积压不动用 postqueue -f 手动冲刷,删除单封或清空队列一律走 postsuper,核对配置用 postconf -n,检查映射命中使用 postmap -q。最关键的一条纪律是不要直接删除队列目录里的文件——那会让队列索引与实际内容不一致,轻则邮件丢失,重则服务无法启动。
常用命令
| 命令 | 作用 | 备注 |
|---|---|---|
| mailq 或 postqueue -p | 查看队列内容 | 排障第一步 |
| postqueue -f | 手动重试整个队列 | 冲刷积压 |
| postsuper -d 队列ID | 删除单封邮件 | 先用 mailq 找到 ID |
| postsuper -d ALL | 清空队列 | 危险,会直接丢信 |
| postsuper -r ALL | 重新入队并更换队列 ID | 常用于修复卡单 |
| postconf -n | 列出非默认配置 | 核对当前生效参数 |
| postmap -q 地址 hash:/etc/postfix/virtual | 查询映射命中结果 | 虚拟域与别名排错 |
| postfix reload | 重载配置 | 改 main.cf 后生效 |
定位一封卡住的邮件
定位一封卡住的邮件
mailq | grep -A2 '4XyZ' # 找到队列 ID 对应记录
grep '4XyZ' /var/log/maillog | tail -20 # 按 ID 追日志,看拒绝原因
postqueue -f # 确认原因已排除后手动重试典型使用场景
- 用户反馈收不到信:先看队列里是否还压着,再按队列 ID 追日志
- 队列堆积告警:区分是目标拒绝、DNS 解析失败还是本机发送速度受限
- 误拦截恢复:确认策略调整后用 postqueue -f 主动重试,而不必等下次调度
- 虚拟域配置变更后验证:用 postmap 确认地址确实命中了期望的映射
- 配置审计:用 postconf -n 快速看出哪些参数偏离了默认值
直接删除 /var/spool/postfix 下的文件会让队列状态与索引不一致:轻量场景看不出来,高并发下会让 Postfix 拒绝启动。所有删除与重排操作一律走 postsuper,这是不可绕过的一条纪律。
日志位置随发行版不同:RHEL 系在 /var/log/maillog,Debian 系在 /var/log/mail.log。启用 systemd 后也可以直接看单元日志,但邮件相关的拒收原因与队列 ID 仍以邮件日志最完整,排障时不要只看进程是否存活。