IMAP协议搜索命令的搜索条件

2024-05-16 00:56:14 发布

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

我从这里读到:

http://docs.python.org/2/library/imaplib.html
IMAP4.search(charset, criterion[, ...])

那个imaplib有搜索方法,我可以从我的邮箱中搜索邮件。

但我不知道有什么标准,或者我可以输入任何东西吗?

我翻了那一页,但一点线索也没有。


Tags: 方法orghttpdocssearch标准htmllibrary
2条回答

您可以使用imap_工具包: https://pypi.org/project/imap-tools/

实现了rfc3501中描述的搜索逻辑。

from imap_tools import Q, AND, OR, NOT
# base
mailbox.fetch('TEXT "hello"')  # str
mailbox.fetch(b'TEXT "\xd1\x8f"')  # bytes
mailbox.fetch(Q(subject='weather'))  # query, the str-like object
# AND
Q(text='hello', new=True)  # 'TEXT "hello" NEW'
# OR
OR(text='hello', date=datetime.date(2000, 3, 15))  # '(OR TEXT "hello" ON 15-Mar-2000)'
# NOT
NOT(text='hello', new=True)  # '(NOT TEXT "hello" NEW)'
# complex:
# 'TO "to@ya.ru" (OR FROM "from@ya.ru" TEXT "\\"the text\\"") (NOT (OR UNANSWERED NEW))')
Q(OR(from_='from@ya.ru', text='"the text"'), NOT(OR(Q(answered=False), Q(new=True))), to='to@ya.ru')
# encoding
mailbox.fetch(Q(subject='привет'), charset='utf8')  # 'привет' will be encoded by MailBox._criteria_encoder

更多信息请参见文档。

我不确定Python期望的标准是什么,但我假设它与普通IMAP相同。参考SEARCH command documentation(正如larsks已经建议的那样),并根据要检索的内容使用关键字组合。标准示例:

SUBJECT Christmas

…检索主题行中包含“Christmas”的消息。

SUBJECT "New York"

…检索主题行中包含“New York”(不带引号)的消息。

OR TO boss SUBJECT resignation

…将被读取为(致老板)或(主题辞职),并将检索“收件人”字段中包含“老板”或主题行中包含“辞职”的邮件。

正如您在上面看到的,IMAP Search在其条件中使用了prefix notation,这在一开始可能会令人困惑。您可以使用方括号或其他方式通过图形方式绘制一个条件树来对它们进行推理—特别是在嵌套ANDs或ORs时非常有用

你可以使用很多不同的标准。请参阅RFC了解整个列表。

在花时间编写搜索请求之前,手动与IMAP交互(例如使用telnet)以习惯搜索请求的结构可能会有帮助。

相关问题 更多 >