この記事では、Pythonの標準ライブラリであるsmtplib
モジュールを使い、GmailなどのSMTPサーバー経由でEメールを送信するスクリプトの作成方法を解説します。スパムとして判定されないよう、適切にフォーマットされたメールを作成するemail
モジュールも併せて紹介します。
1. 準備:Gmailのアプリパスワード
現在のセキュリティ基準では、多くのメールサービス(特にGmail)で、通常のログインパスワードを直接プログラムから使用することはできません。代わりに、アプリパスワード
を生成して使用する必要があります。
- Googleアカウントで2段階認証プロセスを有効にします。
- Googleアカウントのセキュリティ設定ページから「アプリパスワード」を生成します。
- 生成された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
を使用します。
処理の流れは以下の通りです。
smtplib.SMTP_SSL()
でGmailのSMTPサーバーに接続する。smtp.login()
で、メールアドレスと生成したアプリパスワード
を使ってログインする。smtp.send_message()
で、作成したメッセージオブジェクトを送信する。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などの現代的なサービスでは、セキュリティのために通常のパスワードの代わりにアプリパスワード
を使用する必要があります。これらの要素を組み合わせることで、通知の自動化など、様々な応用が可能なメール送信プログラムを作成できます。