通常情况下,MIME格式的邮件信息头中有Date字段,用于记录邮件发送时间,常用的邮件处理库也会从该字段中读取时间。
但是依然会遇到一些邮件中没有Date字段,这些邮件一般是系统邮件,一些字段参数没有设置完整导致信息缺失。此时可以尝试从一些其他字段中获取时间。
- 从Received字段尝试获取。
- 如果是QQ邮箱的邮件,还可以从X-QQ-mid字段尝试获取。
以上两种方法能获取到绝大部分的邮件时间信息。
当然依然有一些邮件也不存在以上字段,甚至MIME源数据中根本没有时间相关的信息。这时候仅从邮件源数据是无法获取到的,只能依靠邮件服务器记录的邮件接收时间。
MIME邮件源数据
MIME邮件源数据的信息头格式通常如下:
Received字段
如果没有Date,那么可以尝试从Received中获取。
Received: from 117.10.116.6 (unknown [10.1.214.146])
by mail.12306.cn (Postfix) with ESMTP id 807EEE1779
for abcdeftest@foxmail.com; Wed, 14 Apr 2021 16:25:55 +0800 (CST)
可以搜索最后一个分号,分号后的内容为时间。
X-QQ-mid字段
如果Received也没有,且又是QQ邮箱下的邮件,可以使用X-QQ-mid字段。
X-QQ-mid字段格式如下:
X-QQ-mid: mxxfb68t1618388753tyznf4kea
其中1618388753就是这封邮件的unix时间戳,前后加上t来分割。
可以用以下正则来搜索:
re.findall('t[0-9]{10}t', str_content)
都没有
如果都没有,那么可以自行从源数据中找找是否有其他字段包含了时间信息。
确实有一些邮件存在信息缺失,尤其是系统邮件,比如这封QQ音乐的通知邮件:
甚至连接收者都没有,这种通常是内部直接调用了邮箱的接口,难以在POP3或IMAP4协议下通过MIME源数据获取基本信息。