【问题标题】:Python IMAP Search from or to designated email addressPython IMAP 从或到指定的电子邮件地址搜索
【发布时间】:2012-05-20 18:00:20
【问题描述】:

我在 Gmail 的 SMTP 服务器上使用它,我想通过 IMAP 搜索发送到某个地址或从某个地址接收到的电子邮件。

这就是我所拥有的:

mail = imaplib.IMAP4_SSL('imap.gmail.com')

mail.login('user', 'pass')
mail.list()
mail.select("[Gmail]/All Mail")

status, email_ids = mail.search(None, 'TO "tech163@fusionswift.com" OR FROM "tech163@fusionswift.com"')

错误的最后一行是:imaplib.error: SEARCH command error: BAD ['Could not parse command']

不确定我应该如何在 python 的imaplib 中执行那种 OR 语句。如果有人能快速解释问题所在或为我指出正确的方向,我们将不胜感激。

【问题讨论】:

    标签: python imap imaplib


    【解决方案1】:

    您收到的错误是从服务器生成的,因为它无法正确解析 搜索查询。为了生成有效的查询,请遵循RFC 3501,在第 49 页中详细解释了结构。

    例如你的搜索字符串是正确的应该是:

    '(OR (TO "tech163@fusionswift.com") (FROM "tech163@fusionswift.com"))'
    

    【讨论】:

    • 谢谢。我正在寻找正确的搜索语法(Google 上没有很多有用的页面)。
    • @Tech163 不客气。使用这些协议,您必须直接访问源 (RFC) 以获得最佳信息。
    • 看来FROM 可能需要更改为HEADER FROM 等。只有后者对我有用。
    • @OlehPrypin 我可以确认在 MS Exchange 服务器上 HEADER FROM 为我工作。
    • 语法标准也可能有助于解释:ABNF - RFC2234
    【解决方案2】:

    尝试使用来自https://github.com/ikvk/imap_tools 的 IMAP 查询生成器

    from imap_tools import A, AND, OR, NOT
    # AND
    A(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
    A(OR(from_='from@ya.ru', text='"the text"'), NOT(OR(A(answered=False), A(new=True))), to='to@ya.ru')
    

    当然你可以使用所有的库工具

    【讨论】:

      猜你喜欢
      • 2011-08-18
      • 1970-01-01
      • 2011-03-27
      • 2011-01-08
      • 1970-01-01
      • 2017-12-21
      • 1970-01-01
      • 2015-06-09
      • 2016-06-17
      相关资源
      最近更新 更多