※このブログではサーバー運用、技術の検証等の費用のため広告をいれています。
記事が見づらいなどの問題がありましたらContactからお知らせください。


【2020年度版】PythonでGmailの自動送信を実装する方法を詳しく解説

Gmail python python3 Django

投稿日:2020年9月16日

このエントリーをはてなブックマークに追加
Gmailのセキュリティが年々厳しくなりプログラミングからメールを自動送信するハードルがどんどん上がっています。簡単なWebサービスや自分への通知などは有料のメールサービスではなくGmailを利用する人も多いでしょう。 この記事ではGmailの設定からPythonでGmailを自動送信する方法について解説します。

はじめに

Gmailのセキュリティが年々厳しくなりプログラミングからメールを自動送信するハードルがどんどん上がっています。簡単なWebサービスや自分への通知などは有料のメールサービスではなくGmailを利用する人も多いでしょう。
この記事ではGmailの設定からPythonでGmailを自動送信する方法について解説します。

この記事では最低限以下のものが必要になります。

  • Googleアカウント
  • スマートフォンなどのデバイス

Googleアカウントの設定

2段階認証の有効化

まずGoogleアカウントのManage Your Account>セキュリティ>Googleへのログインから『2段階認証プロセス』を選択します。

2段階認証を使用するかどうかが聞かれるので「使ってみる」と答えましょう。

おそらくここでログインの要求が入ると思います。ログインできると認証に使うデバイスの選択があります。表示されているデバイスが使える場合にはそのまま「送信」ボタンを押しましょう。もし違うデバイスなどを使いたい場合には「その他のオプション」から違うデバイスを選択できます。

スマートフォンにログインしようとしているかどうかのメールが届くのでメールから「はい」を選びましょう。最後にアカウントの復元方法について聞かれるので自分の携帯番号を入れましょう。もし携帯電話がSMSが受け取れない場合にはコードの取得方法は音声電話にしておくといいでしょう。

入力した番号に「G-○○○○○○」というコードが届きます。G-を抜いたコードを入力して「次へ」を押しましょう。

これでやっと2段階認証の有効化ができるようになります。「有効にする」を選択しましょう。

アプリパスワードの設定

次にアプリパスワードの設定をしていきます。GoogleアカウントのManage Your Account>セキュリティ>Googleへのログインから『アプリパスワード』を選択します。

次にアプリの選択をします。新しくアプリを作るのであれば「アプリを選択」から「その他(名前を入力)」を選択し、自分がわかりやすい名前をつけましょう。今回はMyWebAppという名前にしました。

これでアプリで使用するパスワードが生成されます。これは誰にも見せないようにしましょう。


プログラム側の実装

あとは基本的にビルトインのライブラリで送信することができます。以下に実装の例を記しておきます。

import smtplib
import ssl
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart


def send_email(sender_email="", password="", receiver_email="", text="", html="", subject=""):
    """
    Gmailでメールを送信する

    Args:
        sender_email (str) : 自分のGmailのメールアドレス。
        password (str) : アプリパスワード。Googleアカウントの設定で生成されたもの。
        receiver_email (str) :メールを送る相手のメールアドレス
        text (str) : メールの本文。htmlを設定していない、または受信側でhtmlが表示できない場合に表示される。
        html (str) : 受信者がhtmlを表示できる際にはhtmlがparseされて表示される。
        subject (str) : メールのタイトル
    """
    message = MIMEMultipart("alternative")
    message["Subject"] = subject
    message["From"] = sender_email
    message["To"] = receiver_email

    part1 = MIMEText(text, "plain")
    part2 = MIMEText(html, "html")
    message.attach(part1)
    message.attach(part2)

    context = ssl.create_default_context()
    with smtplib.SMTP_SSL("smtp.gmail.com", 465, context=context) as server:
        server.login(sender_email, password)
        server.sendmail(
            sender_email, receiver_email, message.as_string()
        )

例えばこのような実装にした場合send_email()の引数sender_emailに自分のメールアドレス、passwordでアプリパスワードの章で生成されたパスワード、receriver_emailで受け取り手のメールアドレスを渡せば良いわけですね!

sample
send_email(sender_email="example@gmail.com", password="aaaaaaaaaaaa", receiver_email="test@gmail.com")
このエントリーをはてなブックマークに追加


関連記事

記事へのコメント