追記: 翔泳社さんでDjangoの書籍を出版するのでぜひ読んでみてください。
はじめに
この記事は 2015 tech-yuruyuru アドベントカレンダー - connpass の18日目です
メール周りの機能は基本的に↓のEmailのトピックページにまとまってはいるのですが、他のページに書いてある内容が必要になったりするのでその辺りのことも一緒にまとめてます。
開発中の設定
開発中は実際にメールを送信してほしくないので、その設定をします。 ドキュメントを見た感じ2つぐらい方法があるみたいです。
Dummy Backend
settings.pyで以下のように記述すると、メールを実際には送信せず送信内容等をコンソールに表示してくれます。
EMAIL_BACKEND = 'django.core.mail.backends.dummy.EmailBackend'
SMTPサーバをたてる
以下のコマンドを打つと、localhostのリスニングポート1025でSMTPサーバがたちあがります。
python -m smtpd -n -c DebuggingServer localhost:1025
EMAIL_HOST
と EMAIL_PORT
をこれに合わせて設定しておくと、SMTPサーバは受け取った内容を端末に表示します。もちろんこの時送信はしません。
基本的にDummy Backendを使っておけばいい気がします。
メールの送信
準備
settings.pyに下記の設定を追記します。 EMAIL_PORTやEMAIL_HOSTは先程建てたSMTPサーバに合わせます。
# settings.py EMAIL_HOST = 'localhost' EMAIL_PORT = 1025 EMAIL_HOST_USER = '' EMAIL_HOST_PASSWORD = '' EMAIL_USE_TLS = False DEFAULT_FROM_EMAIL = '[email protected]'
メールの送信 (send_mail)
「件名」「本文」「送信元メールアドレス」「送信先メールアドレス」の順で指定します。
# send_mail.py from django.core.mail import send_mail from <project_name> import settings def send_mail_for_inquiring(to_email): send_mail('問い合わせについて, 'お問い合わせありがとうございました。', settings.DEFAULT_FROM_EMAIL, [to_email], fail_silently=False)
なお送信先はリストで指定します(複数指定可)。
email_userメソッド
https://docs.djangoproject.com/en/1.9/ref/contrib/auth/#django.contrib.auth.models.User.email_user
django.contrib.auth.models
のUserクラスにもemail_user
メソッドというのが用意されています。
中ではsend_mail呼んでいるだけですが、宛先が1人だけならこちらを使えばよさそうです。
user.email_user('メールの件名', 'メールの本文')
メール送信周りのテスト
https://docs.djangoproject.com/en/1.7/topics/testing/tools/#email-services
django.core.mail.outbox
が送信されるメールを保持しますが、manage.pyのtestコマンド実行中は実際には送信されません。
またoutboxは各テストケースの開始時に初期化されます。
>>> from django.core import mail >>> mail.send_mail('件名', 'メッセージ', '[email protected]', ['[email protected]'], fail_silently=False) >>> mail.outbox[0].subject 件名 >>> mail.outbox[0].message メッセージ
メールを使ったアカウント登録処理
ユーザが登録時に入力したメールアドレスにメールを送信し、そこに記載されているリンクを踏むとアカウントを有効化する。というサービスを結構みかけます。 1から実装するのは少し大変そうですが、django-registration-reduxというライブラリを使えば簡単に実装できます。
ドキュメントも丁寧に書かれてあるので英語が大丈夫な人はそちらで十分ですが、以前 id:ottati 先生がまとめてくださってたのでそちらを参考にすると良さそうです。
http://ottati.hatenablog.com/entry/2015/04/14/184637
以上です