システムから送信したメールの返信内容を各担当者がシステムに反映されているかチェックするプログラムを作成するため、メールをGmailで受信し、メールの解析を行うことにした。
この記事ではGmailAPIのサンプルコードと解説をします。
前提条件
- Mac M1(AppleSilicon)
- Python3.12
- GmailAPI v1
- GmailAPIの認証情報の設定、JSONファイル取得済(疎通確認済)
全体の流れ
- Google認証サーバーに認証情報を送信し、アクセストークンを受取
- GmailAPIサービス起動
- 取得したい条件を設定したクエリを生成し、GmailAPIからメールIDを取得する
- メールIDからメールの詳細情報を取得し、件名など必要情報を取得する
- ターミナルから実行
完成形はこちら
GmailAPIメール情報取得 - GitHub
1.Google認証サーバーに認証情報を送信し、アクセストークンを受取
必要パッケージのインストール
ダウンロードした認証情報のJSONファイル(credentials.json)をプログラムと同ディレクトリに保存し、認証サーバー送信する
受け取ったアクセストークンを保存し、有効期間内は同トークンを使用し、有効期限切れの場合は更新する
2.GmailAPIのサービスを起動
GmailAPIのサービスを起動
3.取得したい条件を設定したクエリを生成し、GmailAPIからメールIDを取得する
GmailAPIのメール一覧を取得するAPIから取得したい条件を設定し、メールIDを取得する
メールは1回のリクエストで500件まで取得可能
将来的にGoogleCloudFuncitonsで使用する予定なのでエラーが出たときに強制終了「sys.exit()」していますが、必要に応じたプログラムを改変してください。
また、下記のプログラムはメールIDだけでなくスレッドIDも取得しています。
4.メールIDからメールの詳細情報を取得し、件名など必要情報を取得する
件名取得
メールアドレス取得
正規置換を利用してメールアドレスのみ取得する
送受信日時取得
UNIX時間のミリ秒なので1000で割って秒単位にしてから日付型に変更する
はUNIX時間そのままを取得
本文取得
planメールとhtmlメールでは格納先が違うのに両方に対応する
またbase64形式をUTF-8形式に変換する
5.ターミナルから実行
参考
下記の記事を参考にさせていただきました。
Gmail API を使ってメールを取得すると結構大変だった話(前編) | Sqripts