使用SQL分析thunderbird的来往邮件

数据中心的公共服务邮箱已经积累了2万多封邮件(约4.5gb),因此想分析一下这些邮件的信息,比如,收件箱中都有哪些类型的邮件?逐年逐月的邮件分布情况如何?收件箱中的邮件是否存在什么分布规律,包括小时、周、月等?而为了解决这些问题,就需要对这些邮件信息进行分析,首先想当然的是用SQL方法来分析,但通过搜索后发现,科学院的邮箱不支持SQL操作,在WEB管理界面上可以通过高级搜索完成一些对应的搜索功能,但若搜索的邮件数量超过了1000封,则WEB界面也只能返回前1000条记录,因此不能满足我们的实际需求。

而邮件客户端,通常也没有这些功能。在搜索开源的thunderbird邮件客户端后,发现曾经也有人曾经提问过类似的问题:Query Thunderbird Inbox from a SQL database,但当时的说法是不支持。继续搜索后发现thunderbird的目录下存在一个sqlite文件:global-messages-db.sqlite,官方的说法这是一个全局搜索库。

打开后发现基于这个数据库,基本就可以满足我们的需求,主要是对其中两个表的查询:messages和messagesText_content,这两个表的结构如下:
CREATE TABLE messages (id INTEGER PRIMARY KEY, folderID INTEGER, messageKey INTEGER, conversationID INTEGER NOT NULL, date INTEGER, headerMessageID TEXT, deleted INTEGER NOT NULL default 0, jsonAttributes TEXT, notability INTEGER NOT NULL default 0)
CREATE TABLE 'messagesText_content'(docid INTEGER PRIMARY KEY, 'c0body', 'c1subject', 'c2attachmentNames', 'c3author', 'c4recipients')

其中,messages表的id字段和messagesText_content的docid字段应该是一致的(相当于外键)。经过探索,发现messages中的date字段需要先除以1000000,然后再转换为本地时间戳。

使用SQL处理逐年的邮件分布情况就可以这样:
SELECT strftime('%Y',date/1000000,'unixepoch','localtime'),count(id) FROM messages where folderid=206
group by strftime('%Y',date/1000000,'unixepoch','localtime')


已发布

分类

,

来自

标签:

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注