🙆

[Django] Gmailを送信する設定

2021/05/02に公開

Djangoでメールを送信したい

Web系のシステム、アプリケーションでよくある機能といえばメール送信です。通知に使ったり、ユーザー登録に使ったり。そんなよく使うメール機能をDjangoで実現する方法を紹介します。

メール送信には誰もが持っているであろうGmailを採用します。

環境

  • Python 3.9
  • Django 3.1

設定方法

Gmail(Googleアカウント)の設定

2段階認証を設定後、アプリパスワードを取得してそれを使う必要があります。あらかじめ設定しておきましょう。

参考記事はこちら

settings.pyに追記

これを参考にしてsettings.pyを変更します。
https://docs.djangoproject.com/en/3.1/topics/email/

settings.py
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' #設定しなくてもデフォルトでこの値になるっぽい
EMAIL_HOST = 'smtp.gmail.com'
# EMAIL_HOST = 'smtp.googlemail.com' #これでもいける
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = 'your.address@example.com'
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER # send_mailのfromがNoneの場合自動で入る。
EMAIL_HOST_PASSWORD = 'yourpassword'

EMAIL_HOSTはどっちを設定してもいけたので好きな方でいいと思います。公式ではsmtp.gmail.comを記載していたのでそっちを使うのがいいと思います。

https://support.google.com/mail/answer/7126229?hl=ja

EMAIL_HOST_PASSWORDは、取得したアプリパスワードを記載しましょう。

その他はテンプレ設定なので、どのサイトを見ても同じような紹介がされていると思います。

使ってみる

では使ってみましょう。

コードを書くのが面倒なのでshellでサクッとやってしまいます。

python manage.py shell
>>> from django.core.mail import send_mail
>>> send_mail('タイトル','本文','from@example.com',['to@example.com'],fail_silently=False,)

送信できたでしょうか?

送信できてない場合、メールアドレスやパスワードを確認してみてください。私は、django.core.mail.backends.smtp.EmailBackendと設定するところをdjango.core.mail.backends.console.EmailBackendとしてたのでメール送れず悩みました。

Discussion