我无法使用 Python 在 Gmail 中搜索已发送的电子邮件
Posted
技术标签:
【中文标题】我无法使用 Python 在 Gmail 中搜索已发送的电子邮件【英文标题】:I cannot search sent emails in Gmail with Python 【发布时间】:2011-03-17 02:01:41 【问题描述】:我正在尝试在已发送消息中搜索消息(实际上我都关心),但我只收到传入消息。 暂时我有
imap_conn.select()
str_after = after.strftime('%d-%b-%Y')
typ, msg_ids = imap_conn.search('UTF-8','SINCE',str_after)
这给出了相同的结果
imap_conn.select('INBOX')
当我用 ALL 或 SENT 替换 INBOX 时,我得到: 命令 SEARCH 在 AUTH 状态下非法,仅在 SELECTED 状态下允许
【问题讨论】:
【参考方案1】:import imaplib
obj = imaplib.IMAP4_SSL('imap.gmail.com',993)
obj.login('userid','password')
obj.select('Sent') # <-- response like ('OK', ['74']) --> total no. of mail in sent folder
obj.uid('SEARCH',None,'All') # <-- Returns the list of uids of the sent folder.
【讨论】:
它在 Gmail 上对我不起作用,所以我使用了:imap_conn.select('[Gmail]/Sent Mail') 'Sent' 从 'Imap/Sent' 文件夹而不是从 'Gmail/Sent Mail' 文件夹中选择邮件。如果您在 Thunderbird 中配置您的 gmail 帐户,那么它将自动创建“Imap/Sent”文件夹以将已发送邮件的副本放置到该文件夹中。如果您想从“Gmail/Sent Mail”文件夹中选择邮件,那么您的代码就可以了。【参考方案2】:你需要使用:imap_conn.select('[Gmail]/Sent Mail')
只是想为看到此内容的未来用户指出这一点。它隐藏在 cmets 中。
【讨论】:
请注意:文件夹的名称似乎会根据语言而变化。例如,对我来说,[Gmail]/Sent Mail
不起作用,但 [Gmail]/L&AOQ-hetetyt viestit
起作用(如果我将 Gmail 的显示语言从芬兰语更改为英语,反之亦然)。【参考方案3】:
伙计,错误信息太误导人了。真正的意思是您尝试选择无效的文件夹名称,因此搜索操作失败。
要验证/检查当前有效的文件夹/标签,请执行以下操作:
使用 ImapClient
from imapclient import IMAPClient
## Connect, login and select the INBOX
imap_conn = IMAPClient('imap.gmail.com', use_uid=True, ssl=ssl)
imap_conn.login(USERNAME, PASSWORD)
print(imap_conn.list_folders())
使用 imaplib
import imaplib
mail = imaplib.IMAP4_SSL('imap.gmail.com')
mail.login('myusername@gmail.com', 'mypassword')
print(mail.list())
在我看到它所期望的文件夹名称后,一切都很好。
【讨论】:
【参考方案4】:需要使用打印imap_conn.list()
。标签是基于语言的。例如西班牙语是[Gmail]/Todos
【讨论】:
【参考方案5】:确保在字符串中使用额外的引号:
imap_conn.select('"[Gmail]/Sent Mail"')
这对我有用。
【讨论】:
啊哈,额外的引号!谢谢!以上是关于我无法使用 Python 在 Gmail 中搜索已发送的电子邮件的主要内容,如果未能解决你的问题,请参考以下文章
如何在Python中执行IMAP搜索(使用Gmail和imaplib)?
通过 Gmail API 发送 Excel 文件,但附件已损坏