进行相应配置后 ( set header_cache=
) mutt 将邮件标头保存在缓存文件中。这可用于生成邮件统计信息。有人知道文件格式吗?是否有任何工具可用于提取所包含的信息?(此外strings
,grep
,awk
等)
简短回答:
\n\n缓存完全有可能不全面。如果您删除邮件并且 hcache 稍后重新计算该邮箱的标头缓存,则您的统计信息将不包括删除之前的邮件。
\n\n如果您无权访问服务器的邮件日志,您是否可以访问过滤机制,例如 procmail?您可以使用它来生成替代日志以进行分析。
\n\n否则,您可以使用可以生成收到邮件日志的程序轮询您的邮箱吗?类似于 Offlineimap 过滤器,或者 fetchmail/retchmail 与一些散列和缓存相结合。
\n\n更长的答案:
\n\n缓存文件是一个DBM 风格的数据库。根据您的 mutt 的具体构建选项,它可能是QDBM、tokyo Cabinet、gdbm或Berkeley DB (BDB) 之一;它们都实现了 BDB API 的变体。
\n\n我相信除非您使用正确的库实现,否则您不太可能可靠地读取数据库。ldd
告诉我我当地的 mutt 使用 tokyo Cabinet 实现:
$ ldd /usr/bin/mutt\n\xe2\x80\xa6\nlibtokyocabinet.so.8 => /usr/lib/libtokyocabinet.so.8 (0xb74f2000)\n\xe2\x80\xa6\n
Run Code Online (Sandbox Code Playgroud)\n\n然后,您需要使用该库编写一个程序来查询存储在缓存文件中的 BDB。有 Perl、Ruby、Lua、Java,当然还有 C 的绑定。
\n\n看起来标头作为值存储在数据库中,并由 CRC 索引。据我所知,CRC 源自邮箱的路径,这意味着存储的标头是该邮箱中所有邮件的标头。因此,您的程序本质上最终会得到一个缓冲区,其中包含给定邮箱中所有邮件的所有标头。我认为这不会比从邮箱中当前的所有邮件中提取标头更有用(鉴于上面的“简短答案”,不保证更可靠)。
\n