使用mailutils迭代处理EML文件及遍历EML文件目录的技术问询
mailutils迭代处理EML文件及遍历EML文件目录的技术问询
看起来你在尝试用mailutils的mail命令处理目录里的.eml文件,但遇到了点小问题——直接打开单个.eml文件显示0消息,还想能选择要查看的邮件列表对吧?我来给你理清楚原因和解决办法:
为什么直接用mail -f打开.eml会显示0消息?
mail命令默认是用来读取mbox格式的邮件文件的,而.eml文件是单封邮件的MIME格式,和mbox的存储结构不一样(mbox是把多封邮件拼接成一个文件,每封邮件以From 开头作为分隔)。所以直接用mail -f打开单个.eml文件时,它识别不到符合mbox格式的邮件条目,就会显示0消息。
解决办法:让mail能识别你的.eml文件列表
这里有几个实用的方案,你可以根据需求选:
1. 把所有.eml合并成标准mbox格式,再用mail打开
你可以把目录里的.eml文件合并成一个mbox文件,这样mail就能正常读取并显示邮件列表了:
# 先把所有.eml文件合并成combined.mbox(直接拼接简单快速) cat foomail/*.eml > combined.mbox # 用mail打开这个mbox文件,就能看到邮件列表了 mail -f combined.mbox
如果担心直接拼接可能有格式问题,可以用mailutils自带的formail工具来规范转换:
# 清空目标mbox文件(如果已存在) > combined.mbox # 遍历每个.eml,转换成mbox条目后追加到文件 for eml_file in foomail/*.eml; do formail < "$eml_file" >> combined.mbox done # 打开合并后的mbox mail -f combined.mbox
2. 遍历目录,逐个查看.eml文件
如果你不想合并文件,想逐个查看目录里的.eml,可以用shell循环实现。如果还是想用mail命令,注意有些版本的mail可能需要调整参数,不过更简单的是用less直接查看(因为.eml本质是文本格式):
for eml_file in foomail/*.eml; do echo "=== 当前查看:$eml_file ===" # 用less查看邮件内容,按q退出后继续下一个 less "$eml_file" read -p "看完按回车键继续下一个邮件..." done
如果一定要用mail命令尝试打开单个.eml,可以试试加上-u参数(部分版本支持):
for eml_file in foomail/*.eml; do echo "=== 当前查看:$eml_file ===" mail -u "$eml_file" read -p "看完按回车键继续下一个邮件..." done
3. 用mutt替代mail(可选)
如果你的系统装了mutt,它对.eml文件的支持更好,直接就能打开单个.eml,也可以用目录浏览模式:
# 打开目录里的所有.eml文件,mutt会显示列表让你选择 mutt -f foomail/
备注:内容来源于stack exchange,提问作者Nicholas Saunders
相关产品推荐
相关产品推荐

