Djangoでメール送信の設定を「django.utils.log.AdminEmailHandler」で紹介しているブログ[1]はよくあるのですが、「logging.handlers.SMTPHandler」で設定しているブログがなかったため、公式サイト[2]を調べながら設定しました。
目次
ロガーの設定
handlers
にemail
、loggers
にsendmail
を追加します。
TLSを使うためにsecureに空のタプルを送る必要があるのがポイント!
settings.py(追記) (例)
# Mail
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = "Gメールのユーザ名"
EMAIL_HOST_PASSWORD = "Gメールのアプリパスワード"
EMAIL_USE_TLS = True
# LOGGING
LOGGING = {
'handlers': {
'email': {
'level': 'CRITICAL',
'class':'logging.handlers.SMTPHandler',
'mailhost': EMAIL_HOST,
'fromaddr': 'メールの送信元アドレス',
'toaddrs': ['メールの宛先アドレス'],
'subject': 'メールの件名',
'credentials': (EMAIL_HOST_USER, EMAIL_HOST_PASSWORD),
'secure': (),
},
},
'loggers': {
'sendmail': {
'handlers': ['console', 'file', 'email'],
'level': 'DEBUG',
'propagate': False,
},
},
}
・上の例ではGメールを想定していますが、使用するメーラーによってEMAIL_*
系の変数は変更してください。
・handlers
のemail
、loggers
のsendmail
の設定は、ご自分の環境に合わせて設定してください。
※補足 独自アプリでGメールを使うにはアプリパスワードが必要です。詳しくは「DjangoでGメールを送る方法」をご覧ください。
メールを送信してみる
せっかくなので、Gメールへの送信を確認しています。
ここでは、sendmailというコマンドを作成しようと思います。
事前準備 コマンド関連ファイルの作成
myappというアプリにコマンドを追加していきます。
コマンド実行
(Pjojectを作っていなかったら以下を実行)
$ django-admin startproject mysite .
(事前準備)
$ cd mysite
$ python manage.py startapp myapp
$ mkdir -p myapp/management/commands
$ touch myapp/management/commands/__init__.py
$ touch myapp/management/commands/sendmail.py
settings.py(追記)
INSTALLED_APPS = [
...
'myapp.apps.MyappConfig'
]
コマンドファイルを作成
/myapp/management/commands/sendmail.py
import logging
from django.core.management.base import BaseCommand
from django.core.mail import send_mail
class Command(BaseCommand):
help = "テストコマンド"
logger = logging.getLogger('mylog')
def handle(self, *args, **options):
self.logger.critical('[maillogger]致命的な問題だよ')
def add_arguments(self, parser):
parser.add_argument('--send', action='store_true', help='メールを送信する。')
メールを送信してみる
コマンド実行
$ python manage.py sendmail --send
以下のようにメールが届くはずです。

参考
[1] Django エラー時にメールを送信する
[2] logging.handlers --- ロギングハンドラ
以上!
コメント