Trying to use Gmail API to delete a label.但它似乎不起作用,并在python中触发了insufficient permission错误.这似乎不正确,因为在Google中显示所有权限都已选中.有没有可以申请解决的代码修复,或者是其他什么?

CODE USED TO DELETE LABEL

try:
            target_label_name = "Label_8"
            service = build("gmail", "v1", credentials=creds)
            messages_results = service.users().messages().list(userId="me", labelIds=[target_label_name]).execute()
            messages = messages_results.get("messages", [])
    
            if not messages:
                print(f"No emails found with label: {target_label_name}")
                return
    
            for message in messages:
                # Remove the label from the message
                service.users().messages().modify(userId="me", id=message['id'], body={'removeLabelIds': [target_label_name]}).execute()
                print(f"Label {target_label_name} removed from message {message['id']}.")

Get this error about insufficient permissions

<HttpError 403在请求https://gmail.googleapis.com/gmail/v1/users/me/messages/18c8dae6ea7e602e/modify?alt=json时返回"请求的身份验证范围不足."详细信息:"[{‘Message’:‘权限不足’,‘域’:‘全局’,‘原因’:‘不充分权限’}]">

But Google Console Shows I have all permissions

enter image description here

FULL CODE

import os.path
from google.auth.transport.requests import Request
from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError

SCOPES = ["https://www.googleapis.com/auth/gmail.modify"]

def main():
    creds = None
    credentials_path = "C:\\credentials1.json"

    if os.path.exists("token.json"):
        creds = Credentials.from_authorized_user_file("token.json", SCOPES)

    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
        else:
            flow = InstalledAppFlow.from_client_secrets_file(
                credentials_path, SCOPES
            )
            creds = flow.run_local_server(port=0)
        with open("token.json", "w") as token:
            token.write(creds.to_json())

    try:
        target_label_name = "Label_8"
        service = build("gmail", "v1", credentials=creds)
        messages_results = service.users().messages().list(userId="me", labelIds=[target_label_name]).execute()
        messages = messages_results.get("messages", [])

        if not messages:
            print(f"No emails found with label: {target_label_name}")
            return

        for message in messages:
            # Remove the label from the message
            service.users().messages().modify(userId="me", id=message['id'], body={'removeLabelIds': [target_label_name]}).execute()
            print(f"Label {target_label_name} removed from message {message['id']}.")

    except HttpError as error:
        print(f"An error occurred: {error}")

if __name__ == "__main__":
    main()

MAYBE RELATED TO SCOPES IN OAUTH CONSENT SCREEN enter image description here

推荐答案

删除token.json并再次运行Approve the Authorization.您更改了作用域,但没有再次请求访问新作用域

Python相关问答推荐

Locust请求中的Python和参数

SQLGory-file包FilField不允许提供自定义文件名,自动将文件保存为未命名

. str.替换pandas.series的方法未按预期工作

按列分区,按另一列排序

Pandas—合并数据帧,在公共列上保留非空值,在另一列上保留平均值

移动条情节旁边的半小提琴情节在海运

当递归函数的返回值未绑定到变量时,非局部变量不更新:

Asyncio:如何从子进程中读取stdout?

启动带有参数的Python NTFS会导致文件路径混乱

如何在TensorFlow中分类多个类

为什么if2/if3会提供两种不同的输出?

在输入行运行时停止代码

如何将数据帧中的timedelta转换为datetime

用fft计算指数复和代替求和来模拟衍射?

仅使用预先计算的排序获取排序元素

当HTTP 201响应包含 Big Data 的POST请求时,应该是什么?  

如何使用加速广播主进程张量?

合并相似列表

使用np.fft.fft2和cv2.dft重现相位谱.为什么结果并不相似呢?

大型稀疏CSR二进制矩阵乘法结果中的错误