Part 1 - Start Script, import function from extenal script
01
import the create_service
function from the
google_api.py
script and import the following libraries.
The google_api.py script can be found at
https://learndataanalysis.org/google-py-file-source-code/
go back and create your own create service function I did go to the bottom to see
from google_apis import create_service
import base64
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

02
Supply the function with the following variables, and the full scope,
https://mail.google.com/
Make sure you put this scope into a list You Always forget!!!
from google_apis import create_service import base64 from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText CLIENT_SECRET_FILE = 'credentials.json' API_NAME = 'gmail' API_VERSION = 'v1' SCOPES = ['https://mail.google.com/'] service = create_service(CLIENT_SECRET_FILE,API_NAME,API_VERSION,SCOPES)
run this script and the autorization window should appear as seen in gettingStarted tutorials codeTops and Jiejenn

Part 2 - Create the message, assign values to mimeMessage
01
create the message, and assign the following values to mimeMessage[]
which is an instance of the MIMEMultPart
review codeTops Part 8
to see how the the email objects work
'plain'
is an option for message formate, there are others
including html for style
emailMsg = "yo I'm sending emails with python" mimeMessage = MIMEMultipart() mimeMessage['to'] = 'tstudystuff@gmail.com' mimeMessage['subject'] = 'yo yo' mimeMessage.attach(MIMEText(emailMsg, 'plain')) raw_string = base64.urlsafe_b64encode(mimeMessage.as_bytes().decode())
The red line doesn't work below is corrected by chatGPT

02
The code he jieJenn provides does NOT work, make sure the line with
raw_string = base64.urlsafe_b64encode(mimeMessage.as_bytes()).decode('utf-8')
looks like this.
Below is the complete code and will work
from google_apis import create_service import base64 from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText CLIENT_SECRET_FILE = 'credentials.json' API_NAME = 'gmail' API_VERSION = 'v1' SCOPES = ['https://mail.google.com/'] service = create_service(CLIENT_SECRET_FILE,API_NAME,API_VERSION,SCOPES) emailMsg = "yo I'm sending emails with python" mimeMessage = MIMEMultipart() mimeMessage['to'] = 'tstudystuff@gmail.com' mimeMessage['subject'] = 'yo yo' mimeMessage.attach(MIMEText(emailMsg,'plain')) raw_string = base64.urlsafe_b64encode(mimeMessage.as_bytes()).decode('utf-8') message = service.users().messages().send(userId='me', body={'raw': raw_string}).execute()

Part 3 - my own google_api.py script and full script
01
my google_api.py
script
This is my simplified service script
import os import datetime from collections import namedtuple from google_auth_oauthlib.flow import InstalledAppFlow from googleapiclient.discovery import build from google.oauth2.credentials import Credentials from google.auth.transport.requests import Request def create_service(client_secret_file, api_name, api_version, *scopes, prefix=''): CLIENT_SECRET_FILE = client_secret_file API_SERVICE_NAME = api_name API_VERSION = api_version SCOPES = [scope for scope in scopes[0]] creds = None if os.path.exists('token.json'): creds = Credentials.from_authorized_user_file('token.json',SCOPES) if not creds or creds.valid: if creds and creds.expired and creds.refresh_token: creds.refresh(Request()) else: flow = InstalledAppFlow.from_client_secrets_file('credentials.json',SCOPES) creds = flow.run_local_server(port=0) with open ('token.json','w') as token: token.write(creds.to_json()) try: service = build(CLIENT_SECRET_FILE,API_SERVICE_NAME,API_VERSION,credentials=creds) return service except HTTPError as error: print('err',error)
from google_apis import create_service import base64 from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText CLIENT_SECRET_FILE = 'credentials.json' API_NAME = 'gmail' API_VERSION = 'v1' SCOPES = ['https://mail.google.com/'] service = create_service(CLIENT_SECRET_FILE,API_NAME,API_VERSION,SCOPES) emailMsg = "I don't know" mimeMessage = MIMEMultipart() mimeMessage['to'] = 'tstudystuff@gmail.com' mimeMessage['subject'] = "I'm gonna start drinking I think," mimeMessage.attach(MIMEText(emailMsg,'plain')) raw_string = base64.urlsafe_b64encode(mimeMessage.as_bytes()).decode('utf-8') message = service.users().messages().send(userId='me', body={'raw': raw_string}).execute()