Cloud Functions でも使える Python のメール送信パッケージ smtplib

Cloud Functions – Python

Python は標準で多種多様なパッケージが用意されています。 しかし Cloud Functions では利用できないものや、機能が制限されているものがあり、しかもバージョンによって利用可能有無が異なっていたりします。例えば、過去には画像系のパッケージが Cloud Functions で利用できなかったため、急遽画像処理用のサーバを用意したこともありました。 今回 Cloud Functions よりメールを送信する必要があったので、動作確認を含めて Python のメール送信パッケージ smtplib を利用してみたので紹介します。

日本語のメールを送信

smtplib は Python で手軽に利用できますが、日本語を送ろうとするとメールタイトルとメール本文に文字コードの設定が必要になります。一般的には UTF-8 を利用すればいいでしょう。下記ではその設定方法も併せて紹介します。

SMTP サーバ ( Gmail )

メールを送信するには SMTP サーバが必要になります。今回は無料で利用できる Gmail を利用したケースをご紹介します。ただそのためには Gmail での設定が必要になります。(安全性の低いアプリを許可する方法もありますが、セキュリティ上オススメできないのでここでは紹介しません。)
  1. 下記より Google アカウントのセキュリティを開く https://myaccount.google.com/security
  2. 2段階認証プロセスをオンにする 2段階認証プロセスをオンにし、ウィザードに従って設定を行ってください
  3. アプリパスワードを生成する 通常ログインするときのパスワードとは別に、アプリから利用するためのパスワードを生成します。 ・アプリを選択: メール ・デバイスを選択: そのほか(名前を入力)
生成されたアプリパスワードが表示されますので、そのパスワードを利用します。

ソースコード

それではソースコードを示します。
from email.header import Header
from email.mime.text import MIMEText
import smtplib

SENDER_EMAIL = 'SENDER@MAIL.ADDRESS'
SENDER_PASSWORD = 'GMAIL_APP_PASSWORD'
SENDER_DOMAIN = 'smtp.gmail.com'
SENDER_PORT = 465


def __send_email():
    """
    メール送信
    """
    try:
        email = 'RECIEVER@MAIL.ADDRESS'

        # 送信するメールの内容
        subject = '日本語のテストメール'
        body = """日本語の本文です。
複数行での文章入力のテスト
最後の行"""

        # 送信メッセージの生成
        message = MIMEText(body, 'plain', 'utf-8')
        message['Subject'] = Header(subject, 'utf-8')
        message['From'] = SENDER_EMAIL
        message['To'] = email

        # メール送信実行
        server = smtplib.SMTP_SSL(SENDER_DOMAIN, SENDER_PORT)
        server.login(SENDER_EMAIL, SENDER_PASSWORD)
        server.sendmail(SENDER_EMAIL, email, message.as_string())
        server.close()

    except Exception as e:
        print(e)


if __name__ == '__main__':
    __send_email()
構成は非常にシンプルです。
  • 4〜8行目、送信元の情報
  • 19〜22行目、送信内容
  • 25〜28行目、メッセージ生成
  • 31〜34行目、メール送信実行
特筆するとすれば、 6行目のパスワードには Gmail のアプリパスワード(ログインパスワードではない)を用いること、 33行目のメール送信前に 32行目のログイン処理が必要であることです。 同様なソースコードで Cloud Functions でも動作することを確認済みです。

まとめ

今回は、 Cloud Functions でも使える Python のメール送信パッケージ smtplib を紹介しました。 Python は標準でこのように簡単に利用できるパッケージを備えているのが嬉しいですね。業務系システムを開発しているとメールを送信することはよくあるので、大変助かります。ぜひ皆さんもご利用ください。
» エンジニア登録はこちら