You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Postfix队列中所有邮件的内容导出到文本文件?

如何将Postfix队列中所有邮件的内容导出到文本文件?

我明白你现在的困扰——可疑邮件在队列里转得太快,刚记下ID就没了,根本来不及用postcat查内容。别着急,咱们一步步来解决这个问题:

第一步:先“冻结”队列里的邮件,防止它们被快速处理

首先得让队列里的邮件暂时停住,不然你刚准备导出,邮件就被发送或移除了。用这个命令把所有邮件标记为“暂停投递”状态:

sudo postsuper -h ALL

执行后,Postfix就不会再处理队列里的邮件了,你有足够时间导出内容。

第二步:批量导出所有邮件内容

这里提供两种导出方式,你可以根据需求选择:

方式一:把所有邮件合并到单个文本文件

如果想把所有邮件内容汇总到一个文件里,方便统一查看,运行下面的脚本:

# 先清空已存在的输出文件(如果有的话)
> all_postfix_queue_mails.txt

# 遍历队列里的所有邮件ID,逐个导出内容到文件
for msg_id in $(mailq | grep -E '^[A-F0-9]+' | awk '{print $1}'); do
    echo "---------- 邮件ID: $msg_id ----------" >> all_postfix_queue_mails.txt
    postcat -q "$msg_id" >> all_postfix_queue_mails.txt
    echo -e "\n=====================================\n\n" >> all_postfix_queue_mails.txt
done

执行完成后,当前目录会生成all_postfix_queue_mails.txt,里面包含了队列中所有邮件的内容,每个邮件开头都会标注对应的ID,方便区分。

方式二:每个邮件单独存为一个文件

如果想把每封邮件分开存储,方便逐个排查,可以用这个命令:

for msg_id in $(mailq | grep -E '^[A-F0-9]+' | awk '{print $1}'); do
    postcat -q "$msg_id" > "postfix_mail_${msg_id}.txt"
done

执行后,当前目录会生成一系列类似postfix_mail_ABC123DEF456.txt的文件,每个文件对应一封邮件的完整内容。

第三步:恢复队列的正常处理

导出完成后,别忘了让Postfix继续处理队列里的邮件,执行这个命令取消所有邮件的暂停状态:

sudo postsuper -H ALL

小提示

  • 所有命令需要用root权限或sudo执行,因为Postfix队列文件只有管理员能访问。
  • 如果mailq的输出格式有细微差异(比如ID前带特殊符号),可以调整提取ID的命令为mailq | awk '/^[0-9A-F]{12}/ {print $1}',这个更精准匹配Postfix的12位十六进制队列ID。

备注:内容来源于stack exchange,提问作者AndreaF

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 15:12:31