投稿日:2020年9月16日
Gmailのセキュリティが年々厳しくなりプログラミングからメールを自動送信するハードルがどんどん上がっています。簡単なWebサービスや自分への通知などは有料のメールサービスではなくGmailを利用する人も多いでしょう。 この記事ではGmailの設定からPythonでGmailを自動送信する方法について解説します。
Gmailのセキュリティが年々厳しくなりプログラミングからメールを自動送信するハードルがどんどん上がっています。簡単なWebサービスや自分への通知などは有料のメールサービスではなくGmailを利用する人も多いでしょう。
この記事ではGmailの設定からPythonでGmailを自動送信する方法について解説します。
この記事では最低限以下のものが必要になります。
まず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で受け取り手のメールアドレスを渡せば良いわけですね!
send_email(sender_email="example@gmail.com", password="aaaaaaaaaaaa", receiver_email="test@gmail.com")