HTTPERROR 403“渗透不足”

时间:2018-11-15 08:52:17

标签: python google-api gmail-api google-api-python-client

我正在尝试请求用户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()

1 个答案:

答案 0 :(得分:0)

渗透不足可能意味着两件事之一

  1. 被认证的用户无权执行您尝试做的事情。
  2. 用户没有授予您的应用程序足够的权限来执行您尝试做的事情。

当您使用我的用户名时,我认为我们可以假设问题并非第一个。默认情况下,用户将有权访问其数据。问题出在您的应用程序已请求和用户已授予的权限范围之内。

messages.listmessages.get需要以下作用域之一才能工作。

但是messages.modify需要以下作用域之一才能工作。

您没有提到您要求的范围。我建议您检查范围,并确保您已请求足够的权限来修改电子邮件。确保您对用户进行身份验证。

解决方案

检查您在此行中将SCOPES设置为什么

flow = client.flow_from_clientsecrets('credentials.json', SCOPES)

确保添加

然后再次运行代码,以便再次请求用户同意。