使用imaplib使用双引号搜索Gmail-如何避免搜索命令错误

时间:2019-06-05 15:36:30

标签: python search gmail imaplib

我需要在某人的Gmail帐户中搜索特定短语“ foo bar”。如果我搜索不带双引号的foo bar,则会收到> 125,000封电子邮件,当我使用双引号(从浏览器)进行搜索时,会得到我正在寻找的180条相关电子邮件。但是,imaplib的搜索方法不允许我使用双引号。我对此有什么办法?

这是我已经尝试过的:

tk.Label(root,text=k).grid(row=1)

^^可以工作,但是返回> 125,000封电子邮件,大多数不相关-包含foo和bar的任何内容

import imaplib
mail = imaplib.IMAP4_SSL(SMTP_SERVER)
mail.login(USERNAME,PASSWORD)
mail.select(mail_box)
Type, data = mail.search(None, ('Since 01-Jan-2016'), ('BODY "foo bar"'))

^^^以上所有均引发以下错误:“错误:SEARCH命令错误:错误[b'无法解析命令']”

任何想法都会受到赞赏。

2 个答案:

答案 0 :(得分:0)

这应该有效:

mail.search(None, r'BODY "\"Security Alert\""')

r可以将其转换为原始字符串,因此Python不会解释反斜杠。然后,反斜杠将发送到服务器并正确解释。

您应该能够调整此格式以供使用。

注意:要查看正在发送的内容,请将您的mail.debug临时设置为较高的数字,例如4。这将显示通信量。看到这一点,我发现引号实际上并没有被转义(因为Python将退格视为转义)。

mail.debug = 4

答案 1 :(得分:0)

如上面的Max所建议的,这是可行的:

Select Distinct 
       ColNr = row_number() over (partition by ContractID Order By TierDesc)
 From  Yourtable

请注意,如果您使用的是mail.uid()搜索,则还需要将提取调用更新为...

import imaplib
mail = imaplib.IMAP4_SSL(SMTP_SERVER)
mail.login(USERNAME,PASSWORD)
mail.select(mail_box)

Type, data = mail.uid('search', None, ('Since 01-Jan-2016'), 'X-GM-RAW', r'"\"foo bar\""')