如何将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
相关产品推荐
相关产品推荐

