【问题标题】:How do I search email with rfc822msgid:如何使用 rfc822msgid 搜索电子邮件:
【发布时间】:2019-05-28 14:31:21
【问题描述】:

每当我尝试使用带有 python2 和 imaplib 的 rfc822msgid 搜索我的收件箱时都会收到错误消息。以下是我用来查找特定电子邮件的代码示例...

"rfc822msgid:{msg_id}".format(msg_id=searchtool).replace("\n", "")

变量searchtool 是我要查找的电子邮件中的正确消息ID。我能够通过进入谷歌的 gmail 网页并在他们的搜索框中输入完全相同的命令来从搜索查询中获取我正在寻找的电子邮件来验证这一点。但是,当我尝试通过 python2 中的 imaplib 执行此操作时,出现此错误:

raise self.error('%s command error: %s %s' % (name, typ, data))
imaplib.error: SEARCH command error: BAD ['Could not parse command']

到目前为止,我已经尝试在整个搜索查询和消息 ID 周围加上双引号,但我仍然得到完全相同的错误。如果你们中的一个可以告诉我如何解决这个问题,我们将不胜感激。我花了 2 天时间在谷歌上寻找我为什么会收到这个错误,但我希望你们中的一个人能够帮助我。

【问题讨论】:

  • 如果您在 2019 年编写 Python 代码,那么您绝对应该将目标锁定为受支持、推荐的语言版本,即 Python 3。按照最初的时间线,Python 2 已经死了。现在是僵尸了。非必要请勿靠近。

标签: python gmail imaplib


【解决方案1】:

这是一种受 Gmail 网络搜索支持的语法,IMAP 不支持这种语法。

使用 imaplib 按 Message-Id 搜索的方式类似于

typ, result = imap4obj.search(None, '(HEADER Message-ID "{}")'.format(msgid))

The example in the documentation 更详细地展示了如何使用结果。

【讨论】:

  • 注意,您可以将 Google 搜索命令与他们的 extension 一起使用。搜索 X-GM-RAW “rfc822msgid:...”
  • 感谢您的反馈!我终于让它工作了:'conn.search(None, '(HEADER Message-ID "%s")' % searchtool.replace("\n", ""))'
  • 如果这解决了您的问题,请考虑接受它。如果您愿意,您也可以发布自己的答案并接受。进一步查看help.
猜你喜欢
  • 2011-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-31
  • 2020-09-14
  • 2020-12-04
相关资源
最近更新 更多