スポンサーリンク

【Python入門】Gmail APIでメール送受信&添付ファイルを操作する方法をやさしく解説!

Python入門
  1. 1. はじめに|PythonでGmailを操作するってどういうこと?
  2. 2. 事前準備|Google Cloudと認証情報の設定
    1. ✅ ステップ1:Googleアカウントを用意しよう
    2. ✅ ステップ2:Google Cloud Platform(GCP)にアクセス
    3. ✅ ステップ3:Gmail APIを有効にしよう
    4. ✅ ステップ4:認証情報(OAuth)を設定しよう
      1. 🔐 OAuthの設定手順
    5. ✅ ステップ5:アプリを「公開」状態にする(テスト用でも必要)
  3. 3. Python側の準備|必要なライブラリと認証トークンの取得
    1. ✅ ステップ1:必要なライブラリをインストールしよう
    2. ✅ ステップ2:認証用スクリプトを作成しよう
    3. ✅ ステップ3:トークンを取得する(初回のみ)
    4. 💡トークンは一度作れば再利用できる
  4. 4. Gmail APIでメールを送る方法(テキスト&添付ファイル)
    1. 📩 a. テキストメールを送ってみよう
      1. 💡使用する主なライブラリ
      2. 🧪 コード例(textメール送信)
    2. 📎 b. 添付ファイル付きメールを送ろう
      1. 💡追加インポートが必要なライブラリ
      2. 🧪 コード例(添付ファイル付きメール)
    3. 🔰補足ポイント
  5. 5. Gmail APIでメールを受信する方法
    1. 📥 a. メッセージ一覧を取得しよう
      1. 🧪 コード例:メッセージIDを取得
    2. 📨 b. メールの詳細を取得しよう
      1. 🧪 コード例:件名や送信者の取得
    3. 📄 c. 本文を取得しよう(テキスト部分)
      1. 🧪 コード例:本文のテキスト抽出(text/plain)
    4. 📎 d. 添付ファイルをダウンロードしよう
      1. 🧪 コード例:添付ファイルの取得と保存
    5. 🔍 ポイントまとめ
  6. 6. まとめ|Python×Gmailで業務が自動化できる!
    1. 📌この記事でできるようになったこと
    2. 💡Gmail API活用のアイデア
    3. 🚨 注意しておきたいこと
    4. 👉 あわせて読みたい
  7. よくある質問(Q&A)
    1. 関連投稿:

1. はじめに|PythonでGmailを操作するってどういうこと?

PythonでGmailのメール送信や受信、添付ファイルの操作を自動化してみたいと思ったことはありませんか?

この記事では、PythonとGmail APIを使って「メールの送信・受信」「添付ファイルの送信・ダウンロード」を行う方法を、初心者の方にもわかるようにやさしく解説します。

Pythonを勉強していると、
「この作業、毎回手動でやるのは面倒だな…」
「メール送信や確認を自動化できたら楽なのに」
と感じる場面が増えてきますよね。

たとえば、こんなことができたら便利だと思いませんか?

・Pythonで作成したレポートを、自動でGmailから送信する
・毎週決まった時間に、添付ファイル付きの通知メールを送る
・Gmailに届いた特定のメールを取得して、自動処理する

実はこれらはすべて、PythonからGmail APIを使うことで実現できます。

「Gmail APIって難しそう…」「Google APIは設定が大変そう…」
そんな不安がある方も大丈夫です。

この記事では、APIの基本的な考え方から設定手順、実際に動くPythonコード例までを順番に解説していくので、初めてGmail APIを触る方でも安心して進められます。




2. 事前準備|Google Cloudと認証情報の設定

PythonからGmailを操作するには、まず**Google側の設定(Google Cloud Platform)**を済ませておく必要があります。

ちょっと聞き慣れない言葉が出てくるかもしれませんが、ひとつずつ丁寧にやっていけば大丈夫!ここでは「Gmail APIを使える状態」にするための準備を一緒にやっていきましょう。


✅ ステップ1:Googleアカウントを用意しよう

まずはGoogleアカウントが必要です。普段Gmailを使っている方なら、すでにアカウントがありますね。

もし持っていない場合は、以下から作成してください。
👉 Googleアカウント作成ページ


✅ ステップ2:Google Cloud Platform(GCP)にアクセス

Google Cloud Platform(通称:GCP)は、Googleが提供しているさまざまなサービスを使うためのプラットフォームです。

  1. GCPにアクセス
    👉 https://console.cloud.google.com/
  2. 初めてアクセスする場合、「ようこそ」などの案内が表示されるので、そのまま進みます。
  3. 上部メニューから「プロジェクトを作成」をクリックします。
  4. プロジェクト名を入力(例:「gmail-api-test」)し、「作成」をクリック!

✅ ステップ3:Gmail APIを有効にしよう

  1. 作成したプロジェクトが選択されていることを確認します。
  2. 左上のハンバーガーメニュー(三本線)から
     **「APIとサービス」→「ライブラリ」**を選びます。
  3. 検索窓に「Gmail API」と入力し、出てきたGmail APIをクリック。
  4. 「有効にする」を押します。

これで、プロジェクト内でGmail APIが使えるようになりました!


✅ ステップ4:認証情報(OAuth)を設定しよう

次に、Pythonから安全にGmail APIへアクセスするための**認証情報(OAuthクライアントID)**を作成します。

🔐 OAuthの設定手順

  1. 「APIとサービス」→「認証情報」→「認証情報を作成」→「OAuthクライアントID」を選びます。
  2. 「OAuth同意画面」を設定します。
    • ユーザータイプ → 外部
    • アプリ名 → お好きな名前(例:「My Gmail App」)
    • ユーザーサポートメール → 自分のアドレス
    • デベロッパーの連絡先 → 同じアドレスでOK
  3. スコープを追加
    https://mail.google.com/」というスコープを追加します。これはGmailの送受信すべてにアクセスできる権限です。
  4. OAuthクライアントIDの作成
    • アプリケーションの種類 → デスクトップアプリ
    • 名前 → 適当でOK(例:「Python Gmail Client」)
  5. 作成が完了したら、JSONファイルをダウンロードします。
     このファイルは後でPythonのコード内で使いますので、大切に保管しておきましょう(例:credentials.json)。

✅ ステップ5:アプリを「公開」状態にする(テスト用でも必要)

OAuth同意画面の「公開ステータス」を「公開」に設定しておきましょう。
この設定をしておかないと、Googleアカウントの認証画面が表示されないことがあります。

これでGmail APIを使うためのGoogle側の設定はバッチリです。
次は、Pythonで必要なライブラリをインストールし、認証トークンを取得する手順に進みましょう!




3. Python側の準備|必要なライブラリと認証トークンの取得

Google Cloudの設定が完了したら、いよいよPythonでGmail APIを使う準備に入ります。
まずは必要なライブラリをインストールし、認証用トークンを取得しておきましょう!


✅ ステップ1:必要なライブラリをインストールしよう

Gmail APIをPythonから使うには、以下のライブラリをインストールする必要があります。

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

--upgradeをつけておくことで、古いバージョンが入っていても最新になります。


✅ ステップ2:認証用スクリプトを作成しよう

ここでは、Googleアカウントと連携するためのトークンを作成するコードを用意します。

次のようなPythonスクリプト(例:get_token.py)を作成してください:

from google_auth_oauthlib.flow import InstalledAppFlow
import os
import pickle

# スコープの定義(Gmailの全機能を使うためのスコープ)
SCOPES = ['https://mail.google.com/']

def main():
# credentials.jsonはGCPからダウンロードしたファイル
flow = InstalledAppFlow.from_client_secrets_file('credentials.json', SCOPES)
creds = flow.run_local_server(port=0)

# 取得したトークンを保存しておく(token.pickleに保存)
with open('token.pickle', 'wb') as token:
pickle.dump(creds, token)

if __name__ == '__main__':
main()

✅ ステップ3:トークンを取得する(初回のみ)

作成したスクリプトを実行します。

python get_token.py

すると、ブラウザが立ち上がってGoogleアカウントの選択画面が表示されます。

  • 「このアプリは確認されていません」と表示される場合がありますが、「詳細」→「〜に移動」をクリックして先に進んでOKです。
  • 表示された画面でGmailのアクセスを許可すれば、認証完了です!

完了すると、token.pickleというファイルが自動で保存されます。
このファイルはGmail APIを使うときに自動で読み込まれる認証トークンなので、大事に取っておきましょう。


💡トークンは一度作れば再利用できる

この認証作業は最初の1回だけです!
2回目以降は、保存されたトークンファイル(token.pickle)を自動で読み込むだけでOKになります。

これで、PythonからGmail APIを使う準備はバッチリです!
次は、いよいよGmailを使って「メールを送信」してみましょう📩




4. Gmail APIでメールを送る方法(テキスト&添付ファイル)

準備が整ったら、いよいよPythonからGmailを使って実際にメールを送ってみましょう!
ここでは、まずはシンプルなテキストメール、そして添付ファイル付きのメールを送る方法を順番に解説していきます。


📩 a. テキストメールを送ってみよう

まずは、普通の本文だけのメールを送るコードを紹介します。

💡使用する主なライブラリ

from email.mime.text import MIMEText
from googleapiclient.discovery import build
from google.oauth2.credentials import Credentials
import base64
import pickle

🧪 コード例(textメール送信)

def create_text_message(to, subject, body):
# メール本文をMIMETextで作成
message = MIMEText(body)
message['to'] = to
message['from'] = 'me'
message['subject'] = subject

# base64でエンコード(APIが求める形式)
encoded_message = base64.urlsafe_b64encode(message.as_bytes()).decode()

return {'raw': encoded_message}

def send_text_mail():
# 保存しておいたトークンを読み込む
with open('token.pickle', 'rb') as token:
creds = pickle.load(token)

# Gmail APIに接続
service = build('gmail', 'v1', credentials=creds)

# メッセージを作成
message = create_text_message(
to='recipient@example.com',
subject='テストメール',
body='こんにちは!PythonからGmailを送ってみました。'
)

# メールを送信
send_message = service.users().messages().send(userId='me', body=message).execute()
print(f'送信成功! メッセージID: {send_message["id"]}')

📎 b. 添付ファイル付きメールを送ろう

画像やPDFなどのファイルをメールに添付したい場合は、少しだけ手順が増えます。でも安心してください。やることは以下の通りです:

💡追加インポートが必要なライブラリ

from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders
from email.mime.text import MIMEText
import mimetypes
import os

🧪 コード例(添付ファイル付きメール)

def create_message_with_attachment(to, subject, body, file_path):
message = MIMEMultipart()
message['to'] = to
message['from'] = 'me'
message['subject'] = subject

# 本文を添付
message.attach(MIMEText(body))

# 添付ファイルを追加
content_type, encoding = mimetypes.guess_type(file_path)
main_type, sub_type = content_type.split('/', 1)

with open(file_path, 'rb') as file:
attachment = MIMEBase(main_type, sub_type)
attachment.set_payload(file.read())

encoders.encode_base64(attachment)
filename = os.path.basename(file_path)
attachment.add_header('Content-Disposition', 'attachment', filename=filename)
message.attach(attachment)

# エンコードして返す
encoded_message = base64.urlsafe_b64encode(message.as_bytes()).decode()
return {'raw': encoded_message}

def send_mail_with_attachment():
# トークン読み込み
with open('token.pickle', 'rb') as token:
creds = pickle.load(token)

service = build('gmail', 'v1', credentials=creds)

message = create_message_with_attachment(
to='recipient@example.com',
subject='添付ファイルテスト',
body='こちらは添付ファイル付きメールのテストです。',
file_path='test.pdf' # 添付したいファイルのパス
)

send_message = service.users().messages().send(userId='me', body=message).execute()
print(f'送信成功! メッセージID: {send_message["id"]}')

🔰補足ポイント

  • userId='me' は「認証済みの自分自身のアカウント」という意味です。
  • 添付ファイルは、最大25MBまで送信可能です。
  • .jpg.pdf.csvなどさまざまな形式に対応できます。

ここまでできれば、PythonからのGmail送信は完璧です。
次は、Gmailに届いたメールをPythonで受信・取得する方法を学んでいきましょう📥




5. Gmail APIでメールを受信する方法

ここからは、PythonでGmailに届いたメールを読み取る方法について解説します!

PythonからGmail APIを使えば、メールの件名や送信者、本文の内容はもちろん、添付ファイルまで取得することができます
ちょっと複雑そうに見えるかもしれませんが、大丈夫!ひとつずつ丁寧に進めていきましょう。


📥 a. メッセージ一覧を取得しよう

まずはGmailに届いた最新のメッセージ一覧を取得してみます。

🧪 コード例:メッセージIDを取得

from googleapiclient.discovery import build
from google.oauth2.credentials import Credentials
import pickle

def list_messages():
with open('token.pickle', 'rb') as token:
creds = pickle.load(token)

service = build('gmail', 'v1', credentials=creds)

results = service.users().messages().list(userId='me', maxResults=5).execute()
messages = results.get('messages', [])

for msg in messages:
print(f"メッセージID: {msg['id']}")

maxResults=5 とすることで、最新の5件のメールIDを取得しています。


📨 b. メールの詳細を取得しよう

取得したメッセージIDを使って、メールの本文や送信者、件名などの情報を取得できます。

🧪 コード例:件名や送信者の取得

def get_message_detail(message_id):
with open('token.pickle', 'rb') as token:
creds = pickle.load(token)

service = build('gmail', 'v1', credentials=creds)
message = service.users().messages().get(userId='me', id=message_id, format='full').execute()

headers = message['payload']['headers']

def get_header(name):
for header in headers:
if header['name'].lower() == name.lower():
return header['value']
return None

print('件名:', get_header('Subject'))
print('送信者:', get_header('From'))
print('宛先:', get_header('To'))

📄 c. 本文を取得しよう(テキスト部分)

メールの本文は少し構造が複雑ですが、基本はこのように取得します:

🧪 コード例:本文のテキスト抽出(text/plain)

import base64

def get_plain_text_body(message):
parts = message['payload'].get('parts', [])
for part in parts:
if part.get('mimeType') == 'text/plain':
data = part['body'].get('data')
if data:
text = base64.urlsafe_b64decode(data).decode()
return text
return '本文が見つかりません'

# 取得済みメッセージを渡すと本文を表示
def get_body_example(message_id):
with open('token.pickle', 'rb') as token:
creds = pickle.load(token)

service = build('gmail', 'v1', credentials=creds)
message = service.users().messages().get(userId='me', id=message_id, format='full').execute()

body = get_plain_text_body(message)
print('本文:')
print(body)

📎 d. 添付ファイルをダウンロードしよう

最後に、添付ファイルの取得方法です。

🧪 コード例:添付ファイルの取得と保存

def download_attachment(message_id):
with open('token.pickle', 'rb') as token:
creds = pickle.load(token)

service = build('gmail', 'v1', credentials=creds)
message = service.users().messages().get(userId='me', id=message_id, format='full').execute()

parts = message['payload'].get('parts', [])
for part in parts:
filename = part.get('filename')
body = part.get('body', {})
if filename and 'attachmentId' in body:
attachment = service.users().messages().attachments().get(
userId='me',
messageId=message_id,
id=body['attachmentId']
).execute()

file_data = base64.urlsafe_b64decode(attachment['data'])
with open(filename, 'wb') as f:
f.write(file_data)
print(f'{filename} を保存しました。')

🔍 ポイントまとめ

  • 本文は text/plain の部分にあります。HTML形式のときは text/html を見る必要あり。
  • 添付ファイルの有無は parts 内の filename で確認できます。
  • 添付データは base64 でエンコードされているので、デコードが必須です。

これで、PythonからGmailの受信メールを読み取り、本文や添付ファイルを取り出す方法までマスターできました!

あとはこの仕組みを自動化したり、特定条件でフィルタリングしたり…と、あなたの用途に合わせてカスタマイズしていけます📬




6. まとめ|Python×Gmailで業務が自動化できる!

おつかれさまでした!ここまでの内容を通して、PythonからGmail APIを使ってメールを送受信する方法をじっくり学んできました。

「メールを自動で送る」と聞くと、ちょっと難しそうな印象がありますが、
今回の手順をふんでみると、意外とシンプルだったのではないでしょうか?😊


📌この記事でできるようになったこと

✅ Gmail APIの使い方を理解できた
✅ Pythonでメールを送信できた(添付ファイル付きもOK)
✅ Gmailから受信したメールを読み取り・解析できた
✅ 添付ファイルを自動で保存できるようになった


💡Gmail API活用のアイデア

このスキルを使えば、こんな自動化も夢じゃありません!

  • ✅ 定期的なレポートをPDFで添付して自動送信📊
  • ✅ 問い合わせメールを受け取ったら自動で内容をチェック📩
  • ✅ 履歴書や注文書など、添付ファイルを自動で保存&処理📂
  • ✅ サーバーからのエラー通知をまとめてメールで送信🔔

ちょっとした業務をPythonでサクッと自動化するだけで、作業効率はグンとアップします!


🚨 注意しておきたいこと

  • Gmail APIの仕様は将来的に変更されることがあるので、公式ドキュメントの確認も定期的におすすめです。
  • 認証ファイル(credentials.jsontoken.pickle)は他人に渡さないように管理しましょう。

👉 あわせて読みたい

以下の記事もぜひチェックして、さらにレベルアップを目指しましょう


よくある質問(Q&A)

Q
Gmail APIを使うのに料金はかかりますか?
A

通常の利用では無料です。
Gmail APIはGoogleのサービスの一部で、基本的には無料で利用できます。ただし、Google Cloudの他の機能(例:BigQueryなど)を併用する場合は、使用量に応じて課金されることもあるため注意しましょう。

Q
credentials.jsontoken.pickleは毎回必要ですか?
A

最初の1回だけ必要で、あとは自動で再利用されます。
credentials.jsonは認証のために必要な設定ファイル、token.pickleは一度認証が成功した後に保存されるログイン情報です。次回以降はtoken.pickleを使ってログイン処理が自動化されるため、ブラウザでの認証は不要です。

Q
添付ファイルのサイズに上限はありますか?
A

はい、あります。Gmailでは最大25MBまでです。
複数ファイルを添付する場合も、合計サイズが25MBを超えるとエラーになります。大きなファイルを送信したい場合は、Googleドライブのリンクを添付する方法が一般的です。

※当サイトはアフィリエイト広告を利用しています。リンクを経由して商品を購入された場合、当サイトに報酬が発生することがあります。

※本記事に記載しているAmazon商品情報(価格、在庫状況、割引、配送条件など)は、執筆時点のAmazon.co.jp上の情報に基づいています。
最新の価格・在庫・配送条件などの詳細は、Amazonの商品ページをご確認ください。

スポンサーリンク