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などの現代的なサービスでは、セキュリティのために通常のパスワードの代わりにアプリパスワードを使用する必要があります。これらの要素を組み合わせることで、通知の自動化など、様々な応用が可能なメール送信プログラムを作成できます。

副業から独立まで「稼げる」Webスキルを習得する(PR)

ここまで読んでいただきありがとうございます。 最後に宣伝をさせてください。

「副業を始めたいが、何から手をつければいいかわからない」「独学でスキルはついたが、収益化できていない」という悩みを持つ方には、マンツーマン指導のWebスクール**「メイカラ」**が適しています。

このスクールは、単に技術を教えるだけでなく、**「副業として具体的にどう稼ぐか」**という実務直結のノウハウ提供に特化している点が特徴です。

講師陣は、実際に「副業Webライターから1年で独立して月収100万円」を達成したプロや、現役で利益を出し続けているブロガーなど、確かな実績を持つプレイヤーのみで構成されています。そのため、机上の空論ではない、現場で通用する戦術を学ぶことができます。

副業に特化した強み

  • 最短ルートの提示: 未経験からでも実績を出せるよう、マンツーマンで指導。
  • AI活用の習得: 副業の時間対効果を最大化するための、正しいAI活用スキルも網羅。
  • 案件獲得のチャンス: 運営がWebマーケティング会社であるため、実力次第で社内案件の紹介など、仕事に直結する可能性があります。

受講者の多くは、「在宅でできる仕事を探している」「副業を頑張りたい」という20代・30代・40代が中心です。

受講前には、講師による無料説明が行われます。無理な勧誘はなく、自分に合った副業スタイルやプランを相談できるため、まずは話を聞いてみることから始めてみてはいかがでしょうか。

ブログで稼ぎたいなら「メイカラ」

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

この記事を書いた人

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

目次