Djangoではsettings.pyのADMINSにメールアドレスを指定しておくと、エラー時に通知を送ってくれるので便利。
でもこれまでの開発でもよくなぜか届かない問題があり、最近Templyの開発でも起きたので備忘録。
まず、メールサーバーの設定が済んでいて、django.core.mail.send_mailで送れることは前提として話を進める。
ADMINSの設定
名前、メールアドレスのタプルのリストを設定
https://docs.djangoproject.com/en/2.0/ref/settings/#admins
DEBUG=False
これは本番では間違えないと思うし当たり前だけど一応。
LOGGINGの設定
今回の原因1つ目
ログを受け取ってメールにしているので設定に追加が必要。
下記抜粋
LOGGING = { 'version': 1, 'disable_existing_loggers': True, 'formatters': { 'standard': { 'format': '%(asctime)s [%(levelname)s] %(name)s: %(message)s' }, }, 'filters': { 'require_debug_false': { '()': 'django.utils.log.RequireDebugFalse', }, 'require_debug_true': { '()': 'django.utils.log.RequireDebugTrue', }, }, 'handlers': { 'mail_admins': { 'level': 'ERROR', 'class': 'django.utils.log.AdminEmailHandler', 'include_html': True, 'filters': ['require_debug_false'], }, }, 'loggers': { 'django.request': { 'handlers': ['mail_admins'], 'level': os.environ.get('DJANGO_LOG_LEVEL', 'INFO'), 'propagate': True, }, }, }
SERVER_EMAILの設定
今回の原因2つ目
似たようなメールの送信元としてDEFAULT_FROM_EMAILがあるが、ADMINSとMANAGERSはこれを使わない。
代わりにSERVER_EMAILを使っており、設定しないとroot@localhostが使われてしまう。
自前のメールサーバーであれば問題ないかもしれないが、今回メールのbackendに使っていたsendgridでは問題があるようで、スパムにも入らず消えてしまっていた。
https://docs.djangoproject.com/en/2.0/ref/settings/#server-email
SERVER_EMAIL = 'admins@sample.jp'
- 作者: 淵上 喜弘
- 発売日: 2017/05/10
- メディア: Kindle版
- この商品を含むブログを見る
Django1.10 QUICKSTART-BOOK with Python3: 作りながら学ぶDjangoアプリケーション開発
- 作者: 淵上 喜弘
- 出版社/メーカー: 淵上 喜弘
- 発売日: 2016/12/04
- メディア: Kindle版
- この商品を含むブログを見る