DjangoBrothers BLOG ✍️

2021/06/10

このエントリーをはてなブックマークに追加
Django テスト メール

Django メール送信のテストを実装する方法

バージョン

  • Django 3.2

Djangoでメール送信のテスト

Djangoのテスト内でメール送信処理をした時は、実際にはメールは送信されずにダミーのoutbox(django.core.mail.outbox)に保存されます。outboxは送信済メールのリストなのでoutbox[インデックス番号]の形式で送信されたメールを取得することができます。

mail_test.py

from django.core import mail
from django.core.mail import EmailMessage
from django.test import TestCase

class EmailTest(TestCase):
    def test_send_email(self):
        # メール送信処理
        EmailMessage(
            subject="件名です",
            body="本文です",
            from_email="[email protected]",
            to=["[email protected]"],
            cc=["[email protected]", "[email protected]"],
            bcc=["[email protected]", "[email protected]"],
        ).send()

        # 1通のメールが送信されたことの確認。(送信されないことを確認したい場合は0を指定)
        self.assertEqual(len(mail.outbox), 1)

        # 各プロパティの確認
        self.assertEqual(mail.outbox[0].subject, "件名です")
        self.assertEqual(mail.outbox[0].body, "本文です")
        self.assertEqual(mail.outbox[0].from_email, "[email protected]")
        self.assertEqual(mail.outbox[0].to, ["[email protected]"])
        self.assertEqual(mail.outbox[0].cc, ["[email protected]", "[email protected]"])
        self.assertEqual(mail.outbox[0].bcc, ["[email protected]", "[email protected]"])

なお、各テストケースごとにoutboxはリセットされます。

参考