python-imaplib.error:状态为AUTH的命令抓取非法
作者:互联网
我正在尝试使用我在网上找到的几段代码以及自己进行的一些编辑,从Gmail下载附件.但是,以下代码:
import email, getpass, imaplib, os, random, time
import oauth2 as oauth
import oauth2.clients.imap as imaplib
MY_EMAIL = 'example@gmail.com'
MY_TOKEN = "token"
MY_SECRET = "secret"
consumer = oauth.Consumer('anonymous', 'anonymous')
token = oauth.Token(MY_TOKEN, MY_SECRET)
url = "https://mail.google.com/mail/b/"+MY_EMAIL+"/imap/"
m = imaplib.IMAP4_SSL('imap.gmail.com')
m.authenticate(url, consumer, token)
m.select('INBOX')
items = m.select("UNSEEN");
items = items[0].split()
for emailid in items:
data = m.fetch(emailid, "(RFC822)")
返回此错误:
imaplib.error: command FETCH illegal
in state AUTH
当我获得授权后,为什么提取将是非法的?
解决方法:
您没有对选择呼叫进行错误检查.通常,这是构造邮箱连接的第一部分的方式:
# self.conn is an instance of IMAP4 connected to my server.
status, msgs = self.conn.select('INBOX')
if status != 'OK':
return # could be break, or continue, depending on surrounding code.
msgs = int(msgs[0])
本质上,您遇到的麻烦是您选择了一个不存在的邮箱,状态消息可能不应该正确显示为“ OK”,并且您要遍历的值无效.记住,选择需要一个邮箱名称.它不会基于标志进行搜索(这可能是您尝试使用“ UNSEEN”进行的操作).当您选择一个不存在的邮箱时,您实际上会收到以下消息:
('NO', ['The requested item could not be found.'])
在这种情况下,对于项目中的电子邮件ID不能正常运行.不幸的是,这并不是您想要的.您将在有效邮箱中得到的内容如下:
('OK', ['337'])
希望能有所帮助.
要解决注释中的问题,如果要实际检索邮箱中看不见的邮件,可以使用以下方法:
status, msgs = self.conn.select('INBOX')
# returns ('OK', ['336'])
status, ids = self.conn.search(None, 'UNSEEN')
# returns ('OK', ['324 325 326 336'])
if status == 'OK':
ids = map(int, ids[0].split())
响应将类似于来自select的响应,但是您将获得一个ID列表,而不是单个整数.
标签:imaplib,python 来源: https://codeday.me/bug/20191102/1994603.html