通过Gmail API删除消息时权限不足

5 投票
2 回答
3053 浏览
提问于 2025-04-18 17:23

我的代码应该是从我的收件箱里取一条消息,检查里面是否有链接,然后把这个链接提取出来,再把这条消息删除掉。

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 个回答

1

删除 token.pickle 文件。运行你的代码后,这个文件会自动重新生成。当你运行代码时,会弹出一个浏览器窗口,让你授权你的账户和你正在使用的应用程序。就像你之前做的 'quickstart' 代码一样。

7

之前你在同一个文件夹里注册了一个只读的权限,这个信息被保存在一个叫做gmail.storage的文件里。

把这个文件移走,然后再运行你的程序,应该就能正常工作了。

撰写回答