Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I get around HttpError 403 Insufficient Permission? (gmail api, python)

Tags:

python

gmail

api

I keep getting the following error when I execute my code:

An error occurred: <HttpError 403 when requesting https://www.googleapis.com/gmail/v1/users/me/messages/send?alt=json returned "Insufficient Permission"> 

This is my code:

import httplib2 import os from httplib2 import Http  from apiclient import discovery import oauth2client from oauth2client import client from oauth2client import tools  try:     import argparse     flags = argparse.ArgumentParser(parents=[tools.argparser]).parse_args() except ImportError:     flags = None  #SCOPES = 'https://www.googleapis.com/' SCOPES = 'https://www.googleapis.com/auth/gmail.compose' CLIENT_SECRET_FILE = 'client_secret.json' APPLICATION_NAME = 'Gmail API Quickstart'  def get_credentials():     """Gets valid user credentials from storage.      If nothing has been stored, or if the stored credentials are invalid,     the OAuth2 flow is completed to obtain the new credentials.      Returns:         Credentials, the obtained credential.     """     home_dir = os.path.expanduser('~')     credential_dir = os.path.join(home_dir, '.credentials')     if not os.path.exists(credential_dir):         os.makedirs(credential_dir)     credential_path = os.path.join(credential_dir,                                    'gmail-quickstart.json')      store = oauth2client.file.Storage(credential_path)     credentials = store.get()     if not credentials or credentials.invalid:         flow = client.flow_from_clientsecrets(CLIENT_SECRET_FILE, SCOPES)         flow.user_agent = APPLICATION_NAME         if flags:             credentials = tools.run_flow(flow, store, flags)         else: # Needed only for compatability with Python 2.6             credentials = tools.run(flow, store)         print 'Storing credentials to ' + credential_path     return credentials  def CreateMessage(sender, to, subject, message_text):   """Create a message for an email.    Args:     sender: Email address of the sender.     to: Email address of the receiver.     subject: The subject of the email message.     message_text: The text of the email message.    Returns:     An object containing a base64 encoded email object.   """   message = MIMEText(message_text)   message['to'] = to   message['from'] = sender   message['subject'] = subject   return {'raw': base64.b64encode(message.as_string())}  testMessage = CreateMessage('ENTER SENDERS EMAIL ADDRESS', 'ENTER RECEIVERRS EMAIL ADDRESS', 'ENTER SUBJECT', 'ENTER EMAIL BODY')  def SendMessage(service, user_id, message):   """Send an email message.    Args:     service: Authorized Gmail API service instance.     user_id: User's email address. The special value "me"     can be used to indicate the authenticated user.     message: Message to be sent.    Returns:     Sent Message.   """   try:     message = (service.users().messages().send(userId=user_id, body=message)                .execute())     print 'Message Id: %s' % message['id']     return message   except errors.HttpError, error:     print 'An error occurred: %s' % error   testSend = SendMessage(service, 'me', testMessage) 

I keep reading that I need to edit a credentials file, but I can't seem to find it. I have windows 7 installed. Does anyone know what I need to do in order to get past this error? I'm a total noob at this so please excuse me if I seem a bit nooby about this. Thanks!

like image 936
semiflex Avatar asked Aug 21 '15 14:08

semiflex


People also ask

What is a 403 error on gmail?

An error 403 occurs when a usage limit has been exceeded or the user doesn't have the correct privileges.


1 Answers

Even though the accepted answer is 100% correct. I think it's worth pointing out that why that's the case.

When you authorize a gmail service client, you can specify several different scopes: All, compose, labels, etc...

These are all listed here: https://developers.google.com/gmail/api/auth/scopes

The scope mentioned in the answer provides complete gmail access.

like image 183
Olshansk Avatar answered Sep 29 '22 17:09

Olshansk