编程语言
首页 > 编程语言> > python-imaplib.error:状态为AUTH的命令抓取非法

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