Gmailのsmtpを使ってメールを送信する

2020-06-10 hit count image

djangoプロジェクトでGmailのsmtpを使ってメールを送信する方法と開発した時あた問題を共有します。

概要

djangoでサーバサイドを開発した時メールを送信する必要がありました。今回のブログポストではdjangoプロジェクトでGmailのsmtpを使ってメールを送信する方法を紹介します。それと、メール送信機能を開発した時あた問題点も共有します。

Google Account設定

SMTPを使ってGmailでメールを送信したい場合、まずLess secure apps & your Google Accountを設定する必要があります。

まず、下記のリンクを使ってGoogle Accountに移動します。

ログインした後、Google Accountで移動すると、下記のような画面が見えます。

Google Account ページ

左のSecurityメニューを選択して少しスクロールすると、下記の画面が確認できます。

Google Account Less secure app

メニューを選択して入って、Allow less secure appsONの状態で変更します。

Google Account Less secure app

メニューがどこにあるかよく分からない方は下記のリンクを使ってください。

参考で2-Step Verification(2段階認証)を使ってるアカウントは設定ができないので注意してください。

django設定

djangoプロジェクトの[project name]/settings.pyを開いて下記のように修正します。

# send email
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.googlemail.com'
EMAIL_USE_TLS = True
EMAIL_PORT = 587
EMAIL_HOST_USER = 'Your email address'
EMAIL_HOST_PASSWORD = 'password'

ここで、 EMAIL_HOST_USEREMAIL_HOST_PASSWORDを自分のグーグルアカウント情報で変更します。

メール送信

下記のコードを使ってHTMLメールを送信することができます。

from django.core.mail import send_mail
from django.conf import settings
...
send_mail(subject, message, email_from, recipient_list, html_message=message)
  • subject: メールのタイトル
  • message: メールの内容
  • email_from: メールを発送した方(私はemail_from = settings.EMAIL_HOST_USERコードを使ってます。)
  • recipient_list: メールを受ける方のリスト。メールアカウントのリスト([email, ])
  • html_message: HTMLメッセージ

これで問題なく、メールを送信することができます。

herokuでSMTPAuthenticationErrorエラー

ローカルでは上手く使いましたが、herokuにデプロイした後、下記のようなエラーが出て、メールが送信されませんでした。

2020-03-02T04:53:02.037241+00:00 app[web.1]:     new_conn_created = self.open()
2020-03-02T04:53:02.037241+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/site-packages/django/core/mail/backends/smtp.py", line 69, in open
2020-03-02T04:53:02.037242+00:00 app[web.1]:     self.connection.login(self.username, self.password)
2020-03-02T04:53:02.037242+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/smtplib.py", line 730, in login
2020-03-02T04:53:02.037242+00:00 app[web.1]:     raise last_exception
2020-03-02T04:53:02.037243+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/smtplib.py", line 721, in login
2020-03-02T04:53:02.037243+00:00 app[web.1]:     initial_response_ok=initial_response_ok)
2020-03-02T04:53:02.037243+00:00 app[web.1]:   File "/app/.heroku/python/lib/python3.6/smtplib.py", line 642, in auth
2020-03-02T04:53:02.037244+00:00 app[web.1]:     raise SMTPAuthenticationError(code, resp)
2020-03-02T04:53:02.037261+00:00 app[web.1]: smtplib.SMTPAuthenticationError: (534, b'....')

GmailとGoogle Accountへ入って確認したら、HerokuサーバのIPがブロックされたことが確認できました。この問題を解決するため、下記のリンクに移動します。

上のリンクを移動すると下記のような画面が確認できます。

Google Account Less secure app

下にあるContinueボタンを押します。そして、また、djangoを使ってメールを送信するとメールが残と送信されることが確認できます。

完了

これでdjangoプロジェクトでGmailのSMTPを使ってメールを送信する方法について見てみました。特に問題ないと思いますが、私みたいに、IPをブロックされる方は上に紹介した内容を試してみてください。

Posts