如何从命令行验证 mbox 存档的完整性?

Cha*_*ert 7 email command-line mbox mailutils text-processing

我有一个来自 gmail 的大型 mbox 文件备份。它超过 5GB,并且每晚都会通过 cron 作业更新新消息。我希望 cron 作业也检查存档的有效性,以确保它仍然是有效的 mbox 格式。

是否有命令行工具来验证 mbox 文件,或者至少列出最新消息?

Raf*_*ffa 3

mbox格式相当简单,标准也相当灵活,大多数电子邮件应用程序并不真正关心该文件本身的完整性,除了每条消息之前存在的行From ...遵循 mbox 格式标准)之外,它后面的空行,而是更关心其中包含的消息的完整性 \xe2\x80\xa6 他们从消息本身获取真实信息 AFAIK ...请参阅我的其他答案以获取深入解释。

\n

因此,在当前的 mbox 文件上运行此awk脚本,只要它具有最低标准,即以以下字符开头的行From(而不是消息头中的一行,后跟冒号:)应该会生成一个可以解析的新 mbox 格式文件通过电子邮件客户:

\n
awk \'\n ! /^From [^:].*/ {\n    p = $0\n}\n\n/^From [^:].*/ {\n    if (p !~ "^$") {\n        $0 = "\\nFrom - Tue Nov 21 17:30:08 2023"\n    } else {\n        $0 = "From - Tue Nov 21 17:30:08 2023"\n    }\n}\n\n1 {\n    print\n}\n\' original_file > fixed_file\n
Run Code Online (Sandbox Code Playgroud)\n

...original_file当前的 mbox 文件在哪里,以及fixed_file将以固定 mbox 格式和来自 .mbox 的消息生成的新文件original_file

\n

请注意,上述脚本将修复From \xe2\x80\xa6消息之前现有行中的常见错误,例如不一致的间距或包含逗号等非标准字符,并将修复消息之间缺少空行的问题 \xe2\x80\xa6 这些类型的错误通常由以下原因引起使用不\xe2\x80\x99 不符合 mbox 格式标准的 mbox 导出工具,并且会导致某些电子邮件客户端感到困惑,这通常会导致这些客户端无法解析 mbox 文件,或者解析包含所有单独邮件的整个文件它作为一个大的连续消息 \xe2\x80\xa6 但是,如果您的 mbox 文件不\xe2\x80\x99 满足此脚本的最低限度,即From \xe2\x80\xa6各个消息之间存在一行,那么您\xe2\x80 \x99ll 可能需要编写自己的脚本来解析消息头本身或首先手动添加该行。

\n