Gmail API权限不足,无法将邮件移至垃圾箱

5

我的代码应该从收件箱中获取一条消息,检查其中是否包含链接,然后提取邮件中的链接并将其删除。

message = gmail_service.users().messages().get(userId='me', id=thread['id'], format='raw').execute()    #get message using thread id
msg_str = base64.urlsafe_b64decode(message['raw'].encode('ASCII'))
msg = email.message_from_string(msg_str)
for part in msg.walk():
    msg.get_payload()
    if part.get_content_type() == 'text/html':
        mytext = base64.urlsafe_b64decode(part.get_payload().encode('UTF-8'))
        html = BeautifulSoup(mytext)
        for link in html.find_all('a'):
            mylink = link.get('href')
            print mylink
            try:
                service.users().messages().trash(userId='me', id=thread['id']).execute()
                print 'Message with id: %s trashed successfully.' % msg_id
            except errors.HttpError, error:
                print 'Could not trash ' + thread['id'] + ': %s' % error

我在代码中定义的范围是.modify,这应该给我所需的权限,以便在没有失败的情况下删除一条消息。为什么会出现错误:

<HttpError 403 when requesting https://www.googleapis.com/gmail/v1/users/me/messages/147d8c9a6348e437/trash?alt=json returned "Insufficient Permission">

编辑:即使是文档示例也会返回403禁止错误,这一定是Gmail API本身的一个bug。

2个回答

7

在过去的某个时候,您在同一目录下以readonly范围注册了,这在名为gmail.storage的文件中被缓存。

将该文件移开,并再次运行您的程序,它应该可以正常工作。


2
gmail.storage文件在哪里/是什么? - bornfromanegg

1
删除token.pickle文件。运行代码后会重新生成该文件。当您运行代码时,将弹出浏览器窗口以授权您的帐户和应用程序权限。就像您执行“快速入门”代码时一样。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接