Django

djangoでgmailの送信ができなかった時に確認したこと

djangoでgmailの送信が全然できねぇとなった時に確認した備忘録です。

何か変更した「python manage.py runserver」でサーバーを再起動し確認を行いました。

settings.pyの状況

settings.pyにはこんな内容を設定しましたが、どうにもメールが送れません。

EMAIL_HOST = ‘smtp.gmail.com’
EMAIL_HOST_USER = ‘your-username@gmail.com’
EMAIL_HOST_PASSWORD = ‘your password’
EMAIL_PORT = 587
EMAIL_USE_TLS = True

こんな感じのエラーで認証にうまく行っていなさそう。

smtplib.SMTPAuthenticationError: (534, b’5.7.9 Application-specific password required. Learn more at\n5.7.9 https://support.google.com/mail/?p=InvalidSecondFactor l18-20034ejp.209 – gsmtp’)

アカウントの情報に間違いがないか確認する

当たり前ですが、メアドとパスワードが間違っていないか改めてgoogleへログインし直して確認してみてください。

私はパスワードの大文字と小文字が違ったようです。面倒だったのでdjangoで設定しているパスワードへ更新しました

下記へ追記しましたが、ここでいうパスワードはアプリパスワードのことです。

画面上ではエラーもなにも出ない

アカウントIDやパスワードがあっていて画面上ではエラーも何も吐かなくなった場合shell操作でgmail送信がうまくいくか確認できます。

参考元:Mail setup on django using Gmail

これにより画面上(ブラウザ上)ではエラーが出なくてもshell上でエラーが確認できました。

$ python manage.py shell
>>> from django.core.mail import send_mail
>>> send_mail(‘Test’, ‘This is a test’, ‘your@email.com’, [‘toemail@email.com’],
fail_silently=False)

からのエラー相変わらず認証でうまく行っていない。

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 g4-200269f13d886fsm682297ejz.71 – gsmtp’)

アプリパスワードが設定できているか確認する

Googleにはどうやらアプリパスワードなるものがあるようです。

リンクへ遷移しアプリパスワードが設定されているか確認します。
アプリパスワードを確認:https://myaccount.google.com/apppasswords

設定するにも謎の選択肢に迷います。

アプリパスワード

とりあえず、「アプリを選択」→「その他(名前を入力)」から適当に名前を入力してみました。が元の画面に戻ってきました。再びこことみると無事パスワードが生成されました。

生成されたアプリパスワード

パスワードを生成されたものに変えてみました。変えてみたけどshellでは同じエラーのまま。

ctrl-Dでshellを閉じ再起動し再確認したところ無事メールが遅れました。

runserverしても問題か確認したところ、別問題(ユーザーのメアドが既に登録済みの場合のエラー分岐がうまくいっていなかった)で結局メールは飛ばなかったが後に修正して問題なくメールが飛びました。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です