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