環境
OS: Windows 10
python: 3.7.5
python: 3.7.5
APIの設定方法などは別途説明予定です。
APIの準備ができているという前提でpythonのプログラム部分について説明します。 といってもコメント欄でほぼ説明しているのでコードのアップのみになります。
googleのdevelopersに紹介されていたpythonのクイックスタートを参考にして作成しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
from __future__ import print_function import os.path 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 import sys import pprint import email import datetime ##################################################################################### # # gmail api を利用したメール一覧(タイトル・送信元)の取得 # 「https://developers.google.com/gmail/api/quickstart/python」(英文)を参考に作成 # ##################################################################################### # スコープの指定(読み込みのみ) #「https://developers.google.com/gmail/api/auth/scopes」(英文)参照 SCOPES = ['https://www.googleapis.com/auth/gmail.readonly'] def main(): # 当ファイル(quickstart.py)と同じフォルダにある「credentials.json」を参照 # 「token.json」を作成、更新する(プログラムで自動取得・自動更新) # 「credentials.json」はGoogle CluodのOAuthクライアントIDを作成してダウンロードしたものをリネームして配置する token_file = os.path.dirname(os.path.abspath(sys.argv[0])) + "/token.json" credentials_file = os.path.dirname(os.path.abspath(sys.argv[0])) + "/credentials.json" creds = None # token.json(ユーザーのアクセス/更新トークン)の存在チェック if os.path.exists(token_file): creds = Credentials.from_authorized_user_file( token_file, SCOPES) # token.json(認証情報)が存在しない、認証情報が古い場合は更新する 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( credentials_file, SCOPES) creds = flow.run_local_server(port=0) # 更新したトークンを保存する with open( token_file, 'w') as token: token.write(creds.to_json()) try: # Gmail API の呼び出し(googleライブラリ使用) # 「https://github.com/googleapis/google-api-python-client」(github)参照 service = build('gmail', 'v1', credentials=creds) # メール一覧の取得 # 「https://developers.google.com/gmail/api/reference/rest/v1/users.messages/list」(英文)を参照 # maxResults: 取得件数 # q: https://support.google.com/mail/answer/7190?hl=ja」を参照 messages = service.users().messages().list(userId='me', maxResults=10, q='').execute() # 取得したメッセージIDからメールの詳細データの取得 mail_data = {} for msg in messages['messages']: mail_ret = service.users().messages().get(userId="me", id=msg["id"]).execute() for header_data in mail_ret['payload']['headers']: # 受信日(表記を統一させるためにひと手間必要) if header_data["name"] == "Date": mail_data["Date"] = str( datetime.datetime.fromtimestamp( email.utils.mktime_tz( email.utils.parsedate_tz( header_data["value"] ) ) ) ) # メールタイトルの取得 if header_data["name"] == "Subject": mail_data["subject"] = header_data["value"] # 送信元アドレスの取得 if header_data["name"] == "From": mail_data["From"] = header_data["value"] # メール情報の表示 print("-----------------------------------") pprint.pprint(mail_data) print("-----------------------------------") except HttpError as error: print(f'An error occurred: {error}') if __name__ == '__main__': main() |