gpt4 book ai didi

python - imaplib.错误 : command FETCH illegal in state AUTH

转载 作者:太空宇宙 更新时间:2023-11-03 15:27:10 25 4
gpt4 key购买 nike

我正在尝试从 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

为什么在我获得授权的情况下 Fetch 是非法的?

最佳答案

您缺少对 select 调用的错误检查。通常,这就是我构建邮箱连接的第一部分的方式:

# 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.'])

在这种情况下,for email id in items 无法正常运行。不幸的是,这不是您想要的。您在有效邮箱中收到的内容如下所示:

('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 列表,而不是消息数量的单个整数。

关于python - imaplib.错误 : command FETCH illegal in state AUTH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5200025/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com