在遇到具有特定字段的特定电子邮件之前,如何搜索电子邮件?
How can I search emails until I encounter a certain email that has a specific field?
我的代码定期监控电子邮件收件箱。
代码示例:
mail = imaplib.IMAP4_SSL(host=server, port=port)
mail.login(account, password)
mail.select()
typ, msgnums = self.mail.search(*WHERE I WANT TO IMPLEMENT*)
一次监控结束后,我保存最后一次查看的邮件的'Message-ID'字段。
为了下次监控,我想搜索收件箱从最新的邮件到有'Message-ID'字段的邮件。
我怎样才能做到这一点?
我检查了 imap 搜索条件,但找不到任何可用于此案例的条件。
谢谢:)
After one monitoring ends, I save the last seen email's 'Message-ID' field.
For the next monitoring, I want to search the inbox from the latest email to the email that has the 'Message-ID' field.
您不能在 Message-ID
字段上执行此操作,因为并非所有 smtp 提供商都在邮件 ID 中使用日期或增加的序列号。所以 Message-ID: XYZ
可以在 Message-ID: ABC
之前或之后。参见 。
UID
有效,如果小心使用:
The combination of mailbox name, UIDVALIDITY
, and UID
must refer to a single immutable message on that server forever.
使用 another SO answer 中的示例:
mail.search('UID 2000:*')
您还可以使用上次检查电子邮件的日期字段。参考one more SO answer and the SEARCH section of RFC3501:
typ, msgnums = mail.search('SINCE 1-Feb-1994')
确保日期采用该格式。您可能会在同一 24 小时内返回重叠的消息,因此您还需要保存 UIDs
,以避免重新获取这些消息。
如果只有您的客户访问收件箱,您也可以使用UNSEEN
,但我不推荐:
mail.search('UNSEEN')
我的代码定期监控电子邮件收件箱。
代码示例:
mail = imaplib.IMAP4_SSL(host=server, port=port)
mail.login(account, password)
mail.select()
typ, msgnums = self.mail.search(*WHERE I WANT TO IMPLEMENT*)
一次监控结束后,我保存最后一次查看的邮件的'Message-ID'字段。
为了下次监控,我想搜索收件箱从最新的邮件到有'Message-ID'字段的邮件。
我怎样才能做到这一点?
我检查了 imap 搜索条件,但找不到任何可用于此案例的条件。
谢谢:)
After one monitoring ends, I save the last seen email's 'Message-ID' field.
For the next monitoring, I want to search the inbox from the latest email to the email that has the 'Message-ID' field.
您不能在 Message-ID
字段上执行此操作,因为并非所有 smtp 提供商都在邮件 ID 中使用日期或增加的序列号。所以 Message-ID: XYZ
可以在 Message-ID: ABC
之前或之后。参见
UID
有效,如果小心使用:
The combination of mailbox name,
UIDVALIDITY
, andUID
must refer to a single immutable message on that server forever.
使用 another SO answer 中的示例:
mail.search('UID 2000:*')
您还可以使用上次检查电子邮件的日期字段。参考one more SO answer and the SEARCH section of RFC3501:
typ, msgnums = mail.search('SINCE 1-Feb-1994')
确保日期采用该格式。您可能会在同一 24 小时内返回重叠的消息,因此您还需要保存 UIDs
,以避免重新获取这些消息。
如果只有您的客户访问收件箱,您也可以使用
UNSEEN
,但我不推荐:mail.search('UNSEEN')