如何准确的标记一封邮件?

运行环境:python3通过POP3_SSL下载解析QQ邮件。
功能:分析未读邮件内容。
思路:首先标记出每一封邮件,然后跟已读邮件做对比。
我尝试过几种办法都不能准确的标记:

  • 1.在本地保存已读邮件数,每次分析跟邮件数对比。缺陷是如果在QQ邮件客户端删除一封邮件又同时收到一封邮件,那么收到的邮件没法读取。
  • 2.保存列表id做对比。称呼可能不太准确,我想表达的是poplib.list()[1][index]其中的后半段数值。比如一般是这样:b'4 40871',提取40871。不知道这个数值怎么生成的,所以担心会不会重复。其次这是在poplib类的数据还不是email.message的数据,怎么跟邮件一一对应还没想好。
  • 3.对比Message-ID。起初我以为这是最佳方案,但遍历过一些邮件之后,发现有部分邮件的Message-ID is None。我觉得Message-ID应该是很重要的属性,为什么可以为空呢?想不明白,就不想了,然后我试着给为None的的邮件自己标注一个ID,可是即使给出一个唯一ID又怎么和服务器上的邮件一一对应呢?还有一点是部分为None的邮件不是来自QQ,而是网易。我不知道这是不是邮件服务器的问题。

以上。如能帮忙解答十分感谢!


解决方案:用hashlib对关键信息取哈希值,我采用的是对发送时间和发送人地址取哈希值标记唯一邮件。

阅读 3.8k
2 个回答

hash足够了,对邮件整个内容取一个hash

用hash试一试

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题