【问题标题】:IMAPlib how to select only emails since a given dateIMAPlib如何仅选择自给定日期以来的电子邮件
【发布时间】:2021-11-29 02:55:30
【问题描述】:

我正在使用 IMAPlib:

self.m.select("Inbox") 
typ, mail = self.m.search(None, "(ALL)", f'(SENTSINCE {datesince})')

地点:

datesince = (datetime.date.today() - datetime.timedelta(days=self.timerange)).strftime("%d-%b-%Y")

print("Datesince:", datesince)

给予:

日期:2021 年 10 月 8 日

但在我的日志文件中,我可以看到以下所有电子邮件都已处理,其中一些来自过去的日期,为什么自过滤器不精确?

这就是我循环浏览电子邮件的方式:

typ, mail = self.m.search(None, "(ALL)", f'(SENTSINCE {datesince})')
    ids = mail[0]
    id_list = ids.split()
    latest_email_id = int(id_list[-1])
    oldest_email_id = int(id_list[0])
    countmail = latest_email_id - oldest_email_id + 1
    print("countmail:", countmail)

    for self.i in tqdm(range(latest_email_id, oldest_email_id - 1, -1)):
        print("Incrementation:",self.i)
        typ, x = self.m.fetch(str(self.i), '(RFC822)')

我只在循环之后删除已删除的电子邮件。

遍历所有邮件以提取 NAV 计数邮件:16 增量:265 主题:Amundi CDA Abs RTN MLT-STRGY Fund (ARMS) - 10082021 价格延迟 日期:2021 年 10 月 8 日星期五 22:10:34 +0000 邮件未删除 增量:264 主题:TR:现金流出 01110066S03,DeAM-Fonds ENPT CORP 日期:2021 年 10 月 7 日星期四 11:29:46 +0200 邮件未删除 增量:263 主题:R:ALIFOND:OUTFLOW 日期:2021 年 10 月 8 日星期五 16:21:30 +0200 邮件未删除 增量:262 主题:回复:入职 - PF92671 - BOK 全球发达市场固定收入 - 发布日期 2021 年 8 月 10 日 日期:2021 年 10 月 8 日星期五 16:19:51 +0200 邮件未删除 增量:261 主题:回复:入职 - PF92671 - BOK 全球发达市场固定收入 - 发布日期 2021 年 8 月 10 日 日期:2021 年 10 月 8 日星期五 14:58:31 +0200 邮件未删除 增量:260 主题:RE:STANLIB IM ADVICE - CreLiq_Amundi-MM 全球债券 - 2021 年 6 月 10 日 日期:2021 年 10 月 8 日星期五 12:50:06 +0200 邮件未删除 增量:259 主题:回复:2021 年 9 月 30 日 NAV AM-MY EURO CREDIT FUND 未收到 日期:2021 年 10 月 8 日星期五 12:01:27 +0200 邮件未删除 增量:258 主题:RE:Problème perf daido 日期:2021 年 10 月 7 日星期四 17:34:51 +0200 邮件未删除 增量:257 主题:NAV officielle PF82299 Mirae - 集成 PAMS 日期:2021 年 1 月 12 日星期二 11:19:41 +0100 邮件未删除 增量:256 主题:NAV officielle PF82299 Mirae - 集成 PAMS 日期:2021 年 1 月 12 日星期二 11:19:41 +0100 邮件未删除 增量:255 主题:回复:入职 - PF90548 - CAVOM 国际义务 - 发布日期 2021 年 6 月 10 日 日期:2021 年 10 月 6 日,星期三 13:22:53 +0200 邮件未删除 增量:254 主题:RE:年龄索赔!!- LU3503 DVD 查询 ISIN:SE0000115446 ex date 30/06/2021 帐户:373662 -- 索赔 #186735 --- 1053736620W [AS3PAM-MAS-13894] 日期:2021 年 10 月 7 日星期四 03:04:26 +0000 邮件未删除 增量:253 主题:FW:贸易外汇结算查询-LU3510 Monnet -373669 日期:2021 年 9 月 28 日星期二 13:51:08 +0200 邮件未删除 增量:252 主题:RE:Devises - Desjardins + Desjardins 集合基金国营农场和 TPIC 养老金计划 2021 年 9 月 日期:2021 年 9 月 29 日星期三 14:23:09 +0200 邮件未删除 增量:251 主题:入职 - PF90548 - CAVOM 国际义务 - 发布日期 2021 年 6 月 10 日 日期:2021 年 9 月 30 日星期四 13:48:26 +0200 /home/ludo915/automate_PDP_IMAP/attachments/入职表格 CAVOM 义务 Internationales.xlsx /home/ludo915/automate_PDP_IMAP/attachments/CAVOM_Obligations_Internationales_2021-09-30_1630583721207.pdf

【问题讨论】:

  • 请修剪您的代码,以便更容易找到您的问题。请按照以下指南创建minimal reproducible example
  • 是的@Vladimir 谢谢你,虽然我过去收到了几封电子邮件,但在 SINCE 范围之外,我相信这是由于产假和假期的人们关闭了他们的电脑,并且给定邮件列表的一部分,回到工作岗位并切换回他们的前景。

标签: python python-3.x email imap imaplib


【解决方案1】:

准确无误。 IMAP 允许您按收件人服务器的到达日期和发件人声明的日期搜索电子邮件。作为you can see from the spec,相关键是sincesentsince

【讨论】:

  • 那我为什么要检索日期早于 2021 年 8 月 10 日的电子邮件?
  • 产假?还有那些在他们的 Outlook 邮箱里有未发送邮件的人在度假?
  • 您可能需要 SINCE 密钥,并且由于 IMAP 不知道时区,因此您可能会比预期的时间少 23 小时或 23 小时。
  • @Max 好的,但我收到一封来自 Date: Tue, 12 Jan 2021 11:19:41 +0100 的电子邮件,这几乎是 9 个月前,对此有合理的解释吗?如果它按预期工作,我将尝试 SINCE 密钥并解决此帖子。
  • 查看internaldate 值,您可以通过 IMAP 检索,它是使用的。通常是在 Received 标头字段中提到的最后一个日期之后一秒左右,但 IMAP 客户端可以将其设置为任何日期(使用 append 命令)。
猜你喜欢
  • 2021-11-04
  • 1970-01-01
  • 1970-01-01
  • 2021-07-29
  • 1970-01-01
  • 2019-02-02
  • 2017-04-04
  • 2015-04-17
  • 1970-01-01
相关资源
最近更新 更多