我正试图通过他们的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)
您的代码有一些问题。首先,确保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