当前位置: 首页 > 知识库问答 >
问题:

权限不足,无法通过API修改Gmail标签

姜育
2023-03-14

我正试图通过他们的API修改GMail收件箱。

但我得到了一个错误:

HttpError 403请求时https://www.googleapis.com/gmail/v1/users/me/labels/SOME_MESSAGE_ID返回"权限不足"

我使用了相同的OAuth凭据来下载我的消息。所以我知道这是可行的。

我检查标签范围是否可用。

我看不出我做错了什么。标签文档没有帮助。

有什么能说明问题吗?

def archive(msg_id):
    creds = None
    if os.path.exists('token.pickle'):
        with open('token.pickle', 'rb') as token:
            creds = pickle.load(token)
    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.json', ArchiveScope)
            creds = flow.run_local_server()
        # Save the credentials for the next run
        with open('token.pickle', 'wb') as token:
            pickle.dump(creds, token)

    service = build('gmail', 'v1', credentials=creds)

    msg_labels = {'removeLabelIds': ['INBOX'], 'addLabelIds': ['MyLabel']}

    service.users().labels().update(userId='me', id=msg_id, body=msg_labels).execute()

    print('Message ID: %s' % msg_id)

共有1个答案

郜玉石
2023-03-14

您的代码有一些问题。首先,确保ArchiveScope是一个包含应用程序所需范围的列表。要更新、创建或删除GMail标签,请https://www.googleapis.com/auth/gmail.readonly或https://www.googleapis.com/auth/gmail.labels 就足够了,如这里所述。

您的代码表明您正在尝试删除“收件箱”标签,并添加一个名为“MyLabel”的新标签。服务描述的方法。用户()。标签()。update()只能用于更改GMail帐户上现有标签的信息,而不能创建或删除。除此之外,“收件箱”标签是一个保留标签,无法删除-当发出删除此标签的有效请求时,服务器会收到“无效删除请求”,如下所示。

DELETE https://www.googleapis.com/gmail/v1/users/me/labels/INBOX

{
  "error": {
    "code": 400, 
    "message": "Invalid delete request", 
    "errors": [
      {
        "domain": "global", 
        "message": "Invalid delete request", 
        "reason": "invalidArgument"
      }
    ]
  }
}

但是,单个邮件可以使用service.users().消息().修改()和您之前使用的{'mobile veLabelIds':['INBOX'],'addLabelIds':['MyLabel']}请求正文删除“收件箱”标签。但是,这只会从指定的邮件中删除标签,不会完全删除标签。

可以在此处找到修改现有标签内容的完整文档,但id参数应等于您要编辑的标签的唯一id,并且正文负载应为包含您要将标签更改为的新名称的字典结构:

lbl_id = "Label_XXXXXXXXXXXXXXX"
    msg_labels = {
      'name' : [‘newLabelName’]
    }
    service.users().labels().update(userId='me', id=lbl_id, body = msg_labels).execute() 
    print('Message ID: %s' % lbl_id)

为了创建标签,您可以使用service.users()。标签()。创建(userId='me', body={'name':'MyLabel'})。执行()函数的作用域与update()相同。由于尚未创建标签,因此不需要标签ID。

删除标签是一样的,尽管是服务。用户()。标签()。删除(userId='me')。execute()在没有正文的情况下使用。与create()不同,delete服务确实需要标签ID,但此请求不返回响应。

 类似资料:
  • 情况: 我正在为我的应用测试Gmail API。 我已经测试了一些请求,它们工作正常。例如,获取消息、获取用户历史记录、获取草稿列表等。。 基本上所有只读请求都工作正常。 相反,我有一些与其他请求的权限相关的问题,例如当我必须编写或删除草稿时。 这是我得到的错误: 代码: 这是初始化应用程序的函数: 这是删除一份草稿的请求: 编辑: 我已尝试撤销权限并设置新凭据。初始化服务时声明的范围是: 如文件

  • 我正在尝试使用gmail api阅读gmail邮件,阅读完邮件后,我会删除邮件标签,这样我就不需要再次处理它了。我能够成功地阅读邮件,但当我试图修改邮件标签时(

  • 问题内容: 执行代码时,我不断收到以下错误: 这是我的代码: 我一直在阅读我需要编辑凭据文件的信息,但似乎找不到它。我安装了Windows 7。有谁知道我需要做些什么才能克服此错误?我对此完全是个菜鸟,因此,如果我对此不太满意,请原谅。谢谢! 问题答案: 即使接受的答案是100%正确的。我认为值得指出的是为什么会这样。 授权gmail服务客户端时,您可以指定几个不同的范围:全部,撰写,标签等。 这

  • 我想查询用户的组。根据 https://graph.microsoft.io/en-us/docs/platform/rest 我执行以下步骤: > 获取代码

  • 好的,正如标题所建议的谷歌分析API问题。。。 null null Analytics Google API错误403:“用户没有任何Google Analytics帐户” Google Analytics API:“用户对此帐户没有足够的权限。” 但仍然无法让它工作。我添加了范围,如下所示: 现在,我有我试图查询的视图id(profile):code46034120/code>,所以我得到了服务

  • 我正在尝试从Google-Analytics访问数据。我正在遵循指南,并且能够对我的用户进行G授权,并从OAuth获得代码。 当我试图从GA访问数据时,我只得到403个不够的权限。我是否必须将我在Google API控制台中的项目连接到我的分析项目?我该怎么做?还是有什么其他原因让我得到403不够的权限回来? 我正在用Python和Django做这件事,而且我已经打开了我的API控制台的Analy