たれながし.info

とあるITエンジニアの備忘録

PythonでGmailからメール送信(SMTP使用)

はじめに

PythonSMTPを使用してGmailからメール送信する方法になります。

GmailSMTPサーバについて

サーバとポート番号

GmailSMTPサーバは「smtp.gmail.com」です。

Gmailがサポートするポート番号はTCP465(TLS)、TCP587(STARTTLS)の2つです。
Pythonの標準SMTPクライアント「smtplib」はTLSをサポートするので、ポート番号「TCP465(TLS)」を使用します。

アプリパスワードについて

Gmailを使用するGoogleアカウントで「2段階認証プロセス」が有効になっている場合、Pythonプログラムからはアプリパスワードを使用してGmailに認証する必要があります。
アプリパスワードはGoogleアカウントの設定画面から取得可能です。

support.google.com

PythonGmail送信の実施

アプリパスワードの取得

私のGoogleアカウントは「2段階認証プロセス」が有効なので、「アプリパスワード」を取得します。
[Googleアカウント]の設定画面(https://myaccount.google.com)から [セキュリティ] > [2段階認証プロセス] > [アプリパスワード]に移動します。

アプリは「メール」、デバイスは「その他(名前を入力)」>「Gmail Python」としました。
※適当に設定しても問題ないと思われる


Pythonプログラム

SMTPを操作するため、Pythonの標準モジュール「smtplib」を使います。
件名や本文をMIMEテキストにエンコードするため、Pythonの標準クラス「email.mime.text.MIMEText」を使います。

import smtplib
from email.mime.text import MIMEText

# パスワード
password = "xxxxxxxxxxxx"

# 送信アカウント、宛先
sender = "test@gmail.com"
recipients = ["test@test.local", "test2@test2.local"]

# 件名、本文
subject = "テストメール"
body = """このメールはテストメールです。
以上、よろしくお願いいたします。"""

def send_email(subject, body, sender, recipients, password):
    msg = MIMEText(body)
    msg['Subject'] = subject
    msg['From'] = sender
    msg['To'] = ', '.join(recipients)
    with smtplib.SMTP_SSL('smtp.gmail.com', 465) as smtp_server:
       smtp_server.login(sender, password)
       smtp_server.sendmail(sender, recipients, msg.as_string())
    print("Message sent!")

send_email(subject, body, sender, recipients, password)

動作確認

無事メールの送受信を確認しました。