(最終更新月:2021年10月)
当ブログで作成中の日報アプリでは、Eメールがコンソールで表示されるよう設定をしていました
開発環境ではこのままが便利で良いですが、本番環境ではエラーの原因となります
当記事を通じて、皆さんも持っているだろうGメールを使って、
- メールを送信する方法
について解説していきます
私が「やってみよう!」と検索をし見つけたやり方は下記の通りでしたが、うまくいきませんでしたが皆さんはいかがでしょうか?
【①settings.pyを変更】
メールの設定をsettings.pyへ書き込みます(当アプリでは、「base.py」です)
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_USE_SSL = True
EMAIL_PORT = 465
EMAIL_HOST_USER = 'Gmailログイン用のEメールアドレス'
EMAIL_HOST_PASSWORD = 'Gmailログイン用のパスワード'
【②Google側の設定】
Googleアカウント管理へすすみ、
アプリのアクセスを許可するよう、下記をオンにする
「これでアクセスができる!」とどのサイトにも書いてありましたが、本番環境では「サーバーエラー 500」とでてしまいうまくいきません
色々と試行錯誤した結果、やり方が見つかりましたので共有します
原因として、Gメール側のセキュリティ向上により以前のやり方が通用しなくなったと考えられます
全体の流れ
全体的には下記の流れで成功しました
- 2段階認証をON
- アプリパスワードを設定
- Gメールログインパスワードの代わりにアプリパスワードをsettings.pyへ設定
以前のやり方では2段階認証をオフにするなどの説明もありますが、どうもうまくいきません
新しいデバイスの登録をブラウザ上でする必要があるのですが、Webサーバーで使用しているリモートコンピューターではブラウザにアクセスができません
解決策としてアプリパスワードを設定するという方法で試したところ上手くいきました!
解説として二段階認証をONにするところから始めます
2段階認証をONにする
アカウント設定 > セキュリティ > 2段階認証プロセスで、2段階認証をONにします。
アプリコードを設定する
2段階認証プロセスをONにしましたら、下部にあるアプリパスワードへ進みます。
「アプリを選択」で、該当するものを選んでください。
あとで見てもわかる名前を入力しておきましょう。
「生成」を押すと、アプリパスワードが発行されます。
こちらのパスワードをコピーして、プロジェクトで使います。
settings.pyの変更
ログインパスワードの代わりにアプリパスワードを入力しよう!
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_USE_SSL = True
EMAIL_PORT = 465
EMAIL_HOST_USER = 'ログイン用のEメールアドレス'
EMAIL_HOST_PASSWORD = '設定したアプリパスワード'
これで設定は完了です!
メールの送信を試してみましょう
メール送信を試してみよう
メールの送信を試すには、シェルを使うとカンタンです
シェルを立ち上げて、
python manage.py shell
シェルが立ち上がりましたら、下記の通りメールを送信するコードを実行してみよう!
from django.core.mail import send_mail
send_mail('テストタイトル', 'テストメッセージ', 'あなたのアドレス', [あなたのアドレス])
メールが届きますか?
参考までに、send_mailメソッドには下記の引数を渡しています
send_mail(タイトル, メッセージ, 誰から送られたか, 誰に送るか(リスト))
まとめ
Googleも日々セキュリティ向上のために設定を変えています
現時点(2021年10月)では、こちらのやり方で成功しましたので参考になれば幸いです
本来であればブラウザ上で新しいデバイスからのログインの許可をすることで、Gmailが使えるようになります
ただWebサーバーでのアクセスだとそれが不可能のためこのようなやり方となりました
簡単にまとめると、以下の流れです。
- 二段階認証をON
- アプリパスワードを発行
- settings.pyでログインパスワードの代わりにアプリパスワードを設定
次回以降、公開したアプリをGoogle検索で出てくるよう登録するための準備をしていきます
まずは、サイトマップというものを作成し、Googleにどんなページが存在しているのかを知らせる準備をしていきましょう!