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

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

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

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

答案1

格式相当简单,标准也相当灵活,大多数电子邮件应用程序并不真正关心文件本身的完整性,除了线From ...(遵循 mbox 格式标准)在每条消息之前空行他们更关心的是其中包含的消息的完整性……据我所知,他们从消息本身获取真实信息……请参阅我的其他答案进行深入解释。

因此,awk只要您当前的 mbox 文件具有最低标准,即以 开头的行From(不是来自邮件头的以冒号结尾的行:),就可以在当前的 mbox 文件上运行此脚本,从而生成一个新的 mbox 格式文件,该文件可通过电子邮件客户端进行解析:

awk '
 ! /^From [^:].*/ {
    p = $0
}

/^From [^:].*/ {
    if (p !~ "^$") {
        $0 = "\nFrom - Tue Nov 21 17:30:08 2023"
    } else {
        $0 = "From - Tue Nov 21 17:30:08 2023"
    }
}

1 {
    print
}
' original_file > fixed_file

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

注意上述脚本将修复From …消息前现有行中的常见错误,如不一致的间距或包含非标准字符(如逗号),并将修复消息之间没有空行的情况...这些类型的错误通常是由于使用不符合 mbox 格式标准的 mbox 导出工具造成的,并且会导致某些电子邮件客户端感到困惑,这通常会导致这些客户端无法解析 mbox 文件,或者将包含所有单个消息的整个文件解析为一条大的连续消息...但是,如果您的 mbox 文件不满足此脚本的最低要求,即From …单个消息之间存在一行,那么您可能需要编写自己的脚本来解析消息头本身或先手动添加该行。

相关内容