Pythonプログラムが終了したらGmailで教えてくれるようにした

Python




Pythonプログラムが終了したらGmailで教えてくれる

この記事はメモです。

下のサイトを参考にしているので、そちらを見てください。
https://valmore.work/automate-gmail-sending/

Gmail APIでやること

  • GCPのGmail APIを有効化
  • OAuth 同意画面の設定
  • OAuthクライアントIDなどが入ったjsonファイルをダウンロード

Pythonプログラム

ライブラリのインストール

pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib

コード

Gmail APIとPythonを使ってメール送信を自動化する方法のプラグラムを引用しています。

#send_gmail.py

import pickle
import os.path
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
import base64
from email.mime.text import MIMEText
from apiclient import errors


# 1. Gmail APIのスコープを設定
SCOPES = ['https://www.googleapis.com/auth/gmail.send']

# 2. メール本文の作成
def create_message(sender, to, subject, message_text):
    message = MIMEText(message_text)
    message['to'] = to
    message['from'] = sender
    message['subject'] = subject
    encode_message = base64.urlsafe_b64encode(message.as_bytes())
    return {'raw': encode_message.decode()}

# 3. メール送信の実行
def send_message(service, user_id, message):
    try:
        message = (service.users().messages().send(userId=user_id, body=message)
                   .execute())
        print('Message Id: %s' % message['id'])
        return message
    except errors.HttpError as error:
        print('An error occurred: %s' % error)
        

def send_gmail(path, json_file, message_text="終了しました"):
    
    # 5. アクセストークンの取得
    #jsonファイルの場所とファイル名
    json_file = path + json_file
    creds = None
    
    if os.path.exists(path + 'token.pickle'):
        with open(path+'token.pickle', 'rb') as token:
            creds = pickle.load(token)
    
    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(json_file, SCOPES)
            creds = flow.run_local_server()
            
        with open(path+'token.pickle', 'wb') as token:
            pickle.dump(creds, token)
            
    
    service = build('gmail', 'v1', credentials=creds)
    
    # 6. メール本文の作成
    sender = '自分のメールアドレス'
    to = '送り先のメールアドレス'
    subject = 'プログラムが終了しました。'
    #message_text = message_text
    
    message = create_message(sender, to, subject, message_text)
    
    # 7. Gmail APIを呼び出してメール送信
    send_message(service, 'me', message)
    

実行するプログラムの末尾に下のように付け加えると、Gmailにお知らせしてくれます。

#==== メインのプログラム終了 =====

#h時間m分s秒かかった。
from send_gmail import send_gmail

path = ""
json_file = ""

message_text = f'h時間m分s秒かかりました'

send_gmail(path, json_file, message_text)
タイトルとURLをコピーしました