Python IMAP搜索部分主题

13

我想获取所有主题以"New Order"开头的电子邮件,但似乎无法弄清楚。目前,我可以使用以下设置搜索完全匹配...

result, data = M.uid('search', None, '(HEADER Subject "Subject Here")')

然而,这不会检索到任何不完全匹配的消息。我该如何进行部分匹配?

如果有关系的话,我是在和 Gmail 的 IMAP 服务器交流。

谢谢。


你正在使用哪个API/库,还有M是什么? - John
您也可能会发现https://dev59.com/aXRC5IYBdhLWcg3wSu97#642988有用。 - John
1
我正在使用imaplib库,M是一个IMAP4对象。我希望只拉取具有所需主题的邮件,而不是每个单独的邮件,尽管我可能错了,但我认为这就是您链接中正在执行的操作。 - Kazurik
4个回答

22
根据 IMAP RFCSEARCH 命令应将所有匹配项都作为子字符串进行匹配:

在所有使用字符串的搜索键中,如果字段是该字符串的子字符串,则消息与该键匹配。 匹配不区分大小写。

因此,搜索操作

M.uid('search', None, 'HEADER Subject "New Order"')

应匹配所有主题中任意位置含有New Order的消息。如果不是这样,你应该通知 Google 他们的服务器没有正常实现 IMAP。同时,你可以尝试使用SUBJECT关键字,如下所示:

M.uid('search', None, 'SUBJECT "New Order"')

根据Google的IMAP扩展文档,您可以使用X-GM-RAW键和Gmail搜索字符串来进行搜索。

M.uid('search', None, r'X-GM-RAW "subject:\"New Order\""')

2
我找出了问题所在。Google/gmail假设所有搜索都是单词,这意味着 '(HEADER Subject "Subject Here")' 将匹配像“Subject Here Extra words for example”这样的内容,但不会匹配“Subject Here5”。我仍然不确定如何在gmail中进行非单词搜索,或者是否可能。 - Kazurik
您将需要使用Gmail的扩展搜索语法。他们仅支持普通搜索的单词定向搜索。(他提供的x-gm-raw位) - Max
1
当我运行"M.uid('search', None, r'X-GM-RAW "subject:"New Order""')"时,我会得到以下错误:"imaplib.error: UID command error: BAD ['Could not parse command']"。你有什么想法为什么会这样? - Kazurik
那么在 Gmail 上通过 IMAP 进行子字符串搜索是不可能的,也没有解决方法? - eozzy
这方面有什么新闻吗? - Ezer K

4
这对我有用:
mail.uid('search', None, r'(X-GM-RAW "subject:\"New Order\"")')

0
这对我有用:
M.uid('search',None, '(SUBJECT "New Order")')

搜索格式为(EmailAttribute "您的搜索字符串")

希望对您有用。


0
这对我有用:

result, data = m.search(None, 'X-GM-RAW', 'subject: New Order')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接