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版
- この商品を含むブログを見る
- 作者: 淵上 喜弘
- 出版社/メーカー: 淵上 喜弘
- 発売日: 2016/12/04
- メディア: Kindle版
- この商品を含むブログを見る