首页 > 解决方案 > 如何在 python 中进行一般的电子邮件搜索

问题描述

在 imaplib 中,mail.search 需要一个标准,请参阅文档https://docs.python.org/2/library/imaplib.html和标准选项https://gist.github.com/martinrusev/6121028

但是,我需要能够使用更通用的搜索。一组文件从不同的发件人发送,具有不同的文件名。在 Outlook 中,我只需键入 .xlsx 即可查找任何带有附件或 .xlsx 的电子邮件。此外,搜索“username@domain.com”将返回所有发往、发自或抄送的电子邮件。如何使用 imap 在 python 中构建类似的搜索功能?

对于这个 SPECIFIC 构建,应该可以使用嵌套的 if、else 和 try 块。但我正在寻找更通用的东西,看看是否有更好的方法。

如果没有,我想完成什么

提供两封电子邮件,它们必须出现在 from 或 cc 中,但不能同时出现在两者中(有时电子邮件从发件人 1 到达,发件人 2 抄送,有时从 1 发送到 2,然后转发给我的团队)。并且需要附加一个 .xlsx 文件。

标签: pythonemailoutlookimapimaplib

解决方案


https://github.com/ikvk/imap_tools

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

您可以单独使用 imap_tools 本身及其查询构建器。

例子:

import datetime
from imap_tools import MailBox, OR
with MailBox('imap.mail.com').login('test@mail.com', 'password', 'INBOX') as mailbox:
    for msg in mailbox.fetch(OR(text='hello', date=datetime.date(2000, 3, 15))):
        print(msg.uid, msg.subject)

有关更多信息,请参阅 lib 文档。


推荐阅读