我无法用Python搜索Gmail中的已发送邮件
我正在尝试搜索已发送的消息(其实我对收件箱和已发送的消息都感兴趣),但我只找到了收到的消息。
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())
当我看到它期待的文件夹名称后,一切就顺利了。