smtplibを使ったメール送信

gmailの場合、SMTPサーバはsmtp.gmail.com:587で設定する。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import os
import smtplib
import email.utils
from email.mime.text import MIMEText

# 環境変数
mail_from = os.environ['MAIL_FROM']
rcpt_to = os.environ['RCPT_TO']
smtp_server = 'smtp.gmail.com'
smtp_port = 587
smtp_user = os.environ['SMTP_USER']
smtp_password = os.environ['SMTP_PASSWORD']

# Body
msg = MIMEText('テストメッセージ\n' + '送信テスト\n')
msg['To'] = email.utils.formataddr(('テスト宛先', mail_from))
msg['From'] = email.utils.formataddr(('テスト送信元', rcpt_to))
msg['Subject'] = 'テストメール'

# smtplib を使ったメール送信
server = smtplib.SMTP(smtp_server, smtp_port)
server.set_debuglevel(True)
try:
server.ehlo()
server.starttls()
server.login(smtp_user, smtp_password)
server.sendmail(mail_from, rcpt_to, msg.as_string())
finally:
server.quit()

Gmailの設定

デフォルトではSMTPサーバとして使用できない

SMTPでメール送信を行う設定をせずに送信するとエラーになる。

1
smtplib.SMTPAuthenticationError: (535, b'5.7.8 Username and Password not accepted. Learn more at\n5.7.8  https://support.google.com/mail/?p=BadCredentials xxxxxxxxxxxxxxxx.xx - gsmtp')

方法1: 安全性の低いアプリのアクセス

標準で無効になっている、安全性の低いアプリのアクセスを有効にして送信可能にする。
パスワードはGmailアカウントのパスワードを使用する。

GmailSecruity width=640

GmailSecruity width=640

GmailSecruity width=640

方法2: 2段階認証用のアプリパスワード

2段階認証を有効にして、アプリパスワードを発行する。
パスワードはアプリ用パスワードとして発行した16桁のパスワードを使用する。

GmailSecruity width=640

GmailSecruity width=640

SMSか音声通話で2段階認証プロセスを有効化する(ここでは音声通話)。

GmailSecruity width=640

GmailSecruity width=640

GmailSecruity width=640

GmailSecruity width=640

認証アプリケーションを設定する。

GmailSecruity width=640

GmailSecruity width=640

GmailSecruity width=640

GmailSecruity width=640

アプリ用パスワードを発行する。

GmailSecruity width=640

GmailSecruity width=640

GmailSecruity width=640