Linux系统之postqueue 命令详解
postqueue 是 Postfix 邮件服务器的队列控制工具,提供普通用户可执行的邮件队列管理功能,主要用于查看队列状态、触发邮件投递等操作,替代了传统 sendmail 中的队列管理命令(如 mailq、sendmail -q)
·
postqueue 命令详解
一、命令概述
postqueue 是 Postfix 邮件服务器的队列控制工具,提供普通用户可执行的邮件队列管理功能,主要用于查看队列状态、触发邮件投递等操作,替代了传统 sendmail 中的队列管理命令(如 mailq、sendmail -q)。
与需要超级用户权限的 postsuper(用于删除邮件、修改状态等)不同,postqueue 适用于常规队列监控和投递触发,可被普通用户执行(受权限配置限制)。
二、命令语法
postqueue 仅支持特定选项组合,语法固定为以下四种形式:
# 刷新所有队列邮件
postqueue [-v] [-c config_dir] -f
# 立即投递指定队列ID的延迟邮件
postqueue [-v] [-c config_dir] -i queue_id
# 列出队列内容(类似 mailq)
postqueue [-v] [-c config_dir] -p
# 立即投递指定站点的所有邮件
postqueue [-v] [-c config_dir] -s site
- 必选选项:
-f/-i/-p/-s四选一,指定核心操作; - 可选选项:
-v(详细日志)、-c config_dir(指定配置目录)。
三、选项详解
3.1 核心功能选项(四选一)
| 选项 | 功能描述 | 关键说明与示例 |
|---|---|---|
-f |
刷新队列:尝试投递所有排队邮件(包括延迟邮件),等价于传统 sendmail -q。 |
通过联系 qmgr(8) 守护进程触发投递;示例: postqueue -f(刷新所有队列) |
-i queue_id |
立即投递指定邮件:对延迟队列中 queue_id 对应的邮件,立即尝试投递。 |
需 Postfix 2.4+,通过 flush(8) 服务器实现;示例: postqueue -i 123ABC(投递 ID 为 123ABC 的邮件) |
-p |
列出队列内容:生成传统 mailq 风格的队列列表,展示待投递邮件信息。 |
通过联系 showq(8) 守护进程获取数据;示例: postqueue -p(查看所有队列邮件) |
-s site |
快速刷新指定站点:立即投递所有发往 site(域名或IP)的邮件。 |
site 需在 fast_flush_domains 配置中;IP需用 [] 包裹(如 [192.168.1.1]);示例: postqueue -s example.com(投递所有发往 example.com 的邮件) |
3.2 辅助选项
| 选项 | 功能描述 | 关键说明与示例 |
|---|---|---|
-c config_dir |
指定 Postfix 配置目录(main.cf 所在路径),替代默认目录(通常为 /etc/postfix)。 |
非默认目录需在主实例 alternate_config_directories 中配置,或由 root 调用;示例: postqueue -c /etc/postfix/test -p(查看测试实例的队列) |
-v |
启用详细日志(调试用),输出操作细节(如与守护进程的通信过程);多 -v 更详细。 |
仅超级用户可使用(Postfix 2.3+); 示例: sudo postqueue -v -f(详细日志模式刷新队列) |
四、队列列表(-p)输出详解
postqueue -p 输出格式与传统 mailq 一致,每条队列条目包含以下信息:
队列ID 大小 到达时间 发送者 接收者(未投递)[失败原因]
- 队列ID:邮件在队列中的唯一标识(如
123ABC),后跟状态字符:*:邮件在活跃队列(已选中待投递);!:邮件在暂停队列(需手动解除暂停才会继续投递)。
- 大小:邮件大小(字节)。
- 到达时间:邮件进入队列的时间(格式:
月 日 时:分:秒)。 - 发送者:邮件发送者地址(如
sender@example.com)。 - 接收者:尚未成功投递的接收者地址(多个接收者用逗号分隔)。
- 失败原因:若上次投递失败,显示失败原因(如
host mx.example.com[192.168.1.1] said: 550 User unknown)。
示例输出:
-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
123ABC* 1234 Thu Sep 21 10:00:00 sender@example.com
recipient@test.com
456DEF! 5678 Thu Sep 21 09:30:00 user@domain.com
error: host mx.domain.com said: 550 Relay denied
五、安全与权限
- 权限机制:
postqueue以 set-group ID 权限运行,允许普通用户连接 Postfix 守护进程(qmgr、showq等),但操作受配置限制。 - 授权控制:
- 查看队列(
-p)权限由authorized_mailq_users控制(默认允许所有用户); - 刷新队列(
-f/-i/-s)权限由authorized_flush_users控制(默认允许所有用户)。
- 查看队列(
- 配置目录限制:通过
-c或MAIL_CONFIG指定非默认配置目录时,需满足:- 目录在主实例
alternate_config_directories中配置; - 或由超级用户(root)调用。
- 目录在主实例
六、诊断信息
- 日志输出:操作过程中的问题(如权限不足、队列ID不存在)会同时记录到 syslog(默认设施
mail)和 标准错误流(stderr)。 - 退出状态:0 表示成功;非 0 表示失败(如无效选项、权限不足、队列操作超时)。
七、环境变量
| 环境变量 | 功能描述 | 限制条件 |
|---|---|---|
MAIL_CONFIG |
指定 Postfix 配置目录,等价于 -c 选项。 |
非默认目录需在 alternate_config_directories 中,或由 root 调用。 |
八、关键配置参数(main.cf)
| 参数名称 | 功能描述 | 默认值与说明 |
|---|---|---|
authorized_flush_users |
允许执行队列刷新操作(-f/-i/-s)的用户列表(Postfix 2.2+)。 |
static:anyone(默认允许所有用户) |
authorized_mailq_users |
允许查看队列(-p)的用户列表(Postfix 2.2+)。 |
static:anyone(默认允许所有用户) |
fast_flush_domains |
允许使用 -s 快速刷新的目标站点列表。 |
$relay_domains(默认与中继域一致) |
trigger_timeout |
向 Postfix 守护进程(如 qmgr)发送触发信号的超时时间。 |
10s(10秒,超时则操作失败) |
alternate_config_directories |
允许通过 -c 或 MAIL_CONFIG 指定的非默认配置目录列表。 |
空(默认仅允许默认目录) |
queue_directory |
Postfix 队列顶层目录(如 /var/spool/postfix)。 |
由 postconf -d 查看,通常为 /var/spool/postfix |
九、常用示例
示例 1:查看队列内容(类似 mailq)
postqueue -p
作用:列出所有待投递邮件的基本信息(ID、大小、时间、发送者、接收者及状态)。
示例 2:刷新所有队列邮件
postqueue -f
作用:触发 qmgr 立即尝试投递所有排队邮件(包括延迟邮件)。
警告:频繁刷新无法投递的邮件会影响其他邮件的投递性能。
示例 3:立即投递指定ID的邮件
postqueue -i 123ABC
作用:对延迟队列中 ID 为 123ABC 的邮件,立即尝试再次投递(需 Postfix 2.4+)。
示例 4:快速刷新指定站点的邮件
# 投递所有发往 example.com 的邮件
postqueue -s example.com
# 投递所有发往 192.168.1.1 的邮件(IP需用[]包裹)
postqueue -s [192.168.1.1]
作用:仅对 fast_flush_domains 中允许的站点,立即触发投递(通过 flush(8) 服务)。
示例 5:详细日志模式操作
sudo postqueue -v -p
作用:以 root 权限查看队列,并输出详细日志(如与 showq 守护进程的通信细节)。
十、注意事项
- 与 postsuper 的区别:
postqueue无删除邮件或修改状态的权限,此类操作需用postsuper(root 权限)。 - 队列状态字符:
*表示活跃(即将投递),!表示暂停(需用postsuper -H queue_id解除)。 - 快速刷新限制:
-s仅对fast_flush_domains中配置的站点有效,否则操作无效。 - 权限问题:普通用户若无法执行操作,需检查
authorized_flush_users和authorized_mailq_users配置。 - 性能影响:频繁使用
-f刷新队列会导致 Postfix 反复尝试投递无效邮件,消耗系统资源,建议仅在必要时使用。
更多推荐



所有评论(0)