PythonのsmtplibでEメールを送信する方法(Gmail対応版)

この記事では、Pythonの標準ライブラリであるsmtplibモジュールを使い、GmailなどのSMTPサーバー経由でEメールを送信するスクリプトの作成方法を解説します。スパムとして判定されないよう、適切にフォーマットされたメールを作成するemailモジュールも併せて紹介します。


目次

1. 準備:Gmailのアプリパスワード

現在のセキュリティ基準では、多くのメールサービス(特にGmail)で、通常のログインパスワードを直接プログラムから使用することはできません。代わりに、アプリパスワードを生成して使用する必要があります。

  1. Googleアカウントで2段階認証プロセスを有効にします。
  2. Googleアカウントのセキュリティ設定ページから「アプリパスワード」を生成します。
  3. 生成された16文字のアプリパスワードを、スクリプト内で通常のパスワードの代わりに使用します。

この手順により、アカウントのセキュリティを保ちながら、プログラムからのメール送信が可能になります。


2. Eメールのメッセージを構築する

スパムフィルタを回避し、件名や送信者、日本語の本文を正しく表示するためには、emailモジュールを使ってメッセージを構築することが推奨されます。

from email.mime.text import MIMEText
from email.header import Header

# 送信するメッセージ内容
body = "これはPythonから送信されたテストメールです。\n本文は複数行にわたります。"

# メッセージオブジェクトを作成
# MIMEText('本文', 'エンコーディング形式', '文字コード')
msg = MIMEText(body, 'plain', 'utf-8')

# ヘッダー情報を設定
msg['Subject'] = Header('Pythonからのテストメール', 'utf-8')
msg['From'] = 'sender@example.com'
msg['To'] = 'recipient@example.com'

3. SMTPサーバーへの接続とメール送信

SMTPサーバーとの通信はsmtplibモジュールが担当します。Gmailの場合、SSL暗号化通信が一般的なためsmtplib.SMTP_SSLを使用します。

処理の流れは以下の通りです。

  1. smtplib.SMTP_SSL()でGmailのSMTPサーバーに接続する。
  2. smtp.login()で、メールアドレスと生成したアプリパスワードを使ってログインする。
  3. smtp.send_message()で、作成したメッセージオブジェクトを送信する。
  4. smtp.quit()でサーバーから切断する。

with文を使うと、処理の終了後やエラー発生時に自動で接続が閉じられるため安全です。


4. 完成したコード全体

これまでの要素をすべて統合した、Gmailからメールを送信する完全なスクリプトを以下に示します。

import smtplib
from email.mime.text import MIMEText
from email.header import Header

# --- 設定 ---
SMTP_SERVER = 'smtp.gmail.com'
SMTP_PORT = 465 # GmailのSSLポート
SENDER_EMAIL = 'your_email@gmail.com' # 自身のGmailアドレス
APP_PASSWORD = 'your_16_character_app_password' # 生成したアプリパスワード
RECIPIENT_EMAIL = 'recipient@example.com' # 送信先アドレス

# --- メッセージの構築 ---
body = "これはPythonスクリプトから自動送信されたテストメールです。"
msg = MIMEText(body, 'plain', 'utf-8')
msg['Subject'] = Header('Pythonからのテストメール', 'utf-8')
msg['From'] = SENDER_EMAIL
msg['To'] = RECIPIENT_EMAIL

# --- メールの送信 ---
try:
    # with文で安全に接続
    with smtplib.SMTP_SSL(SMTP_SERVER, SMTP_PORT) as smtp:
        print("SMTPサーバーにログインしています...")
        smtp.login(SENDER_EMAIL, APP_PASSWORD)
        print("メールを送信しています...")
        smtp.send_message(msg)
        print("メールを正常に送信しました。")

except Exception as e:
    print(f"エラー: メールの送信に失敗しました。 - {e}")

まとめ

Pythonでメールを送信するには、smtplibモジュールでSMTPサーバーとの通信を確立し、emailモジュールで適切にフォーマットされたメッセージオブジェクトを構築します。Gmailなどの現代的なサービスでは、セキュリティのために通常のパスワードの代わりにアプリパスワードを使用する必要があります。これらの要素を組み合わせることで、通知の自動化など、様々な応用が可能なメール送信プログラムを作成できます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次