Python使用IMAP如何从收件箱中读取给定日期和时间的电子邮件

2024-06-02 09:46:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我能够阅读特定主题的信息。在

首先,在初始化时,我使用IMAP登录邮件

self.mail = imaplib.IMAP4_SSL(imapName, imapPort)

然后我可以用这种方法阅读给定主题的电子邮件:

^{pr2}$

我真正想要的是使用fromDateTime,它是UTC Zulu格式,即

2019-02-28T19:43:42.529791Z  

从那个日期/时间到现在(当前时间程序正在运行),在收件箱中阅读给定主题的电子邮件。我利用会议记录很重要。因此,在我的例子中,所有来自UTC时间的电子邮件:2月28日,时间19小时43分钟。电子邮件每30分钟到达一次,所以我需要确保我也利用分钟。在


Tags: self信息利用ssl主题电子邮件时间邮件
3条回答

我相信这可能有用。在

在开始的时候,我删除(存档)所有与给定的主题感兴趣的电子邮件。然后保存日期和时间,每次我阅读收件箱中给定的主题,并破译开始日期到现在,我期望有多少。然后把这些邮件存档以备下次使用

一般来说,只有服务器端搜索无法做到这一点。IMAP搜索语言只支持一天的粒度(没有特定的时区)。您将需要搜索、获取元数据(例如,INTERNALDATE字段),然后再次执行本地筛选器。在

另一种选择是使用UIDs提供的担保。新邮件的UID总是增加(假设您的邮箱没有重新生成),所以您可以使用它来检测新邮件。在

如果你已经用UID搜索了最新的UID,那么你就只能用最高的UID来搜索了。假设您的服务器实现得很好,并且您没有将邮件移动到文件夹中,那么您可以添加搜索词UID n:*,其中n比您所处理的最高UID高一个。这意味着范围从n到框中的最高消息。在

searchStr = '(UID %d:* HEADER Subject ' + "\"" + mySubject + "\"" + ')' % uidStart

并将(uid+1)存储在某个地方(数据库、磁盘上、内存中等),以存储任何大于当前最大uid的消息。在

您需要过滤掉返回的一些搜索结果,但一般逻辑是:

  • 同时发布主题和日期约束的IMAP搜索
  • 从搜索返回的ID结果集构造一个ID集
  • 提供设置给服务器的ID,并获取日期头
  • “迭代日期,通过修剪返回的空白日期”
  • 将剩余的字符串转换为可用于比较的日期时间
  • 丢弃日期时间在所需窗口之外的任何ID

相关问题 更多 >