exceptions.RefreshError(error_details, response_data) when draft_message using Gmail API

Viewed 16
`from __future__ import print_function
import os.path
import base64
from email.message import EmailMessage
import google.auth
from google.auth.transport.requests import Request
from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError

SCOPES = ['https://mail.google.com/']

def main():
"""Shows basic usage of the Gmail API.
Lists the user's Gmail labels.
"""
    creds = None
# 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.
    if os.path.exists('tokenSend.json'):
        creds = Credentials.from_authorized_user_file('token.json', SCOPES)
# If there are no (valid) credentials available, let the user log in.
    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(
             '/home/nihal-linux/projects/gapi/gapitesting/credentials.json', SCOPES)
            creds = flow.run_local_server(port=0)
    # Save the credentials for the next run
        with open('tokenSend.json', 'w') as token:
            token.write(creds.to_json())
# You don't have to care about anything on top of this comment

    try:
    # Call the Gmail API
        service = build('gmail', 'v1', credentials=creds)
        message = EmailMessage()

        message.set_content('This is automated draft mail')

        message['To'] = 'xxxx@gmail.com'
        message['From'] = 'xxxx@gmail.com'
        message['Subject'] = 'Automated draft'

    # encoded message
        encoded_message = base64.urlsafe_b64encode(message.as_bytes()).decode()

        create_message = {
            'message': {
                'raw': encoded_message
            }
        }
    # pylint: disable=E1101
        draft = service.users().drafts().create(userId="me",
                                            body=create_message).execute()

        print(F'Draft id: {draft["id"]}\nDraft message: {draft["message"]}')

    except HttpError as error:
    # TODO(developer) - Handle errors from gmail API.
        print(f'An error occurred: {error}')


if __name__ == '__main__':
    main()`
0 Answers
Related