我正在尝试请求用户gmail数据列表消息并修改其中之一。我收到以下错误
HTTPERROR 403“渗透不足”
代码
def main():
"""Shows basic usage of the Gmail API.
Lists the user's Gmail labels.
"""
# The file token.json stores the user's access and refresh tokens, and is
# created automatically when the authorization flow completes for the first
# time.
store = file.Storage('token.json')
creds = store.get()
if not creds or creds.invalid:
flow = client.flow_from_clientsecrets('credentials.json', SCOPES)
creds = tools.run_flow(flow, store)
service = build('gmail', 'v1', http=creds.authorize(Http()))
# Call the Gmail API
results = service.users().labels().list(userId='me').execute()
labels = results.get('labels', [])
if not labels:
print('No labels found.')
else:
print('Labels:')
for label in labels:
print(label['name'])
response = service.users().messages().list(userId='me',
labelIds='INBOX').execute()
messages = []
if 'messages' in response:
messages.extend(response['messages'])
#print(messages)
for i in messages:
aux_id = i
id = aux_id.get('id')
print(id)
message = service.users().messages().get(userId='me', id=id).execute()
#print (type(message))
data = message.get('payload', {}).get('body',{}).get('data')
data = data.decode('base64')
list_of_dic = message.get('payload',{}).get('headers')
#print(list_of_dic)
#DATE, JUST NEED TO FORMAT IT TO YYYY/MM/DD
for i in list_of_dic:
if i['name'] == 'Date':
aux_date = i
if i['name'] == 'From':
aux_sender = i
if i['name'] == 'Subject':
aux_subject = i
sender = aux_sender.get('value')
date = aux_date.get('value')
subject = aux_subject.get('value')
print(date)
print(sender)
print(subject)
print(data)## data from emaail working
print('***************************************************')
message = service.users().messages().modify(userId='me', id=id,
body='INBOX').execute()
答案 0 :(得分:0)
渗透不足可能意味着两件事之一
当您使用我的用户名时,我认为我们可以假设问题并非第一个。默认情况下,用户将有权访问其数据。问题出在您的应用程序已请求和用户已授予的权限范围之内。
messages.list和messages.get需要以下作用域之一才能工作。
但是messages.modify需要以下作用域之一才能工作。
您没有提到您要求的范围。我建议您检查范围,并确保您已请求足够的权限来修改电子邮件。确保您对用户进行身份验证。
解决方案
检查您在此行中将SCOPES设置为什么
flow = client.flow_from_clientsecrets('credentials.json', SCOPES)
确保添加
然后再次运行代码,以便再次请求用户同意。