python - 在遇到具有特定字段的特定电子邮件之前,如何搜索电子邮件?
问题描述
我的代码定期监控电子邮件收件箱。
代码示例:
mail = imaplib.IMAP4_SSL(host=server, port=port)
mail.login(account, password)
mail.select()
typ, msgnums = self.mail.search(*WHERE I WANT TO IMPLEMENT*)
一次监控结束后,我保存最后一次看到的电子邮件的“消息 ID”字段。
对于下一次监控,我想在收件箱中搜索从最新电子邮件到具有“Message-ID”字段的电子邮件。
我怎样才能做到这一点?
我检查了 imap 搜索条件,但找不到任何可用于这种情况的条件。
谢谢 :)
解决方案
一次监控结束后,我保存最后一次看到的电子邮件的“消息 ID”字段。
对于下一次监控,我想在收件箱中搜索从最新电子邮件到具有“Message-ID”字段的电子邮件。
您不能在Message-ID
现场这样做,因为并非所有 smtp 提供商都在消息 ID 中使用日期或增加序列号。所以Message-ID: XYZ
可以在之前或之后Message-ID: ABC
。参见Message-ID
vs UID
,关于 SO。
UID
工作,如果小心使用:
邮箱名称、
UIDVALIDITY
和的组合UID
必须永远引用该服务器上的单个不可变消息。
使用另一个 SO 答案中的示例:
mail.search('UID 2000:*')
您还可以使用上次检查的电子邮件的日期字段。参考另一个 SO 答案和RFC3501 的 SEARCH 部分:
typ, msgnums = mail.search('SINCE 1-Feb-1994')
确保日期采用该格式。您可能在同一 24 小时内返回的消息重叠,因此您UIDs
还需要保存,以避免重新获取这些消息。
如果您的客户是唯一访问收件箱的人,您也可以使用
UNSEEN
,但我不推荐:mail.search('UNSEEN')
推荐阅读
- python - 使用 PyQt 在 Python 中输入带有验证的小狗框
- java - 将字符串替换为 html 邮件模板
- c# - 比较 Sno 并显示完整的信息表 SQL Server Table
- javascript - ESLINT 无限循环
- javascript - 如何有条件地检测“当前周”的渲染天数?
- google-cloud-platform - 试用结束后访问 Google Cloud Storage
- javascript - 在 slideUp 动画结束之前再次触发函数时动画出现故障
- ruby-on-rails - Poltergeist 使用 CSS 选择器检测到另一个元素
- php - PHP 严格标准在不覆盖超类方法的子类上抛出错误
- android - 部分 TextView 可通过链接点击