我无法用Python搜索Gmail中的已发送邮件

11 投票
5 回答
11698 浏览
提问于 2025-04-16 01:24

我正在尝试搜索已发送的消息(其实我对收件箱和已发送的消息都感兴趣),但我只找到了收到的消息。

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')

当我把 INBOX 替换成 ALL 或 SENT 时,我收到的错误提示是:命令 SEARCH 在 AUTH 状态下是非法的,只能在 SELECTED 状态下使用。

5 个回答

4

在编程中,有时候我们会遇到一些问题,可能是因为代码写得不够好,或者是我们对某些概念理解得不够透彻。比如,有人可能在使用某个工具或者库的时候,发现它的功能和效果和自己预期的不一样。这种情况很常见,尤其是对于刚开始学习编程的小伙伴们。

当你遇到这样的问题时,首先要冷静下来,仔细检查自己的代码,看看有没有哪里写错了。其次,可以查阅相关的文档或者教程,了解这个工具的使用方法和注意事项。很多时候,问题的解决办法就在这些资料里。

如果自己解决不了,也可以去一些编程社区,比如StackOverflow,向其他人请教。在提问的时候,记得把你的代码和遇到的问题描述清楚,这样别人才能更好地帮助你。

总之,编程是一个不断学习和解决问题的过程,遇到困难是很正常的,保持耐心,慢慢来,你一定能克服这些挑战!

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.
5

确保在你的字符串中使用额外的引号:

imap_conn.select('"[Gmail]/Sent Mail"')  

这样做对我有效。

24

哎呀,这个错误信息真让人困惑。它其实是在告诉你,你试图选择一个无效的文件夹名称,所以搜索操作失败了。

要确认一下当前有效的文件夹或标签,可以做以下操作:

使用 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())

当我看到它期待的文件夹名称后,一切就顺利了。

撰写回答