测试邮件发送

Rad*_*Hex 77 python email django smtp django-testing

测试电子邮件发送的任何提示?除了创建一个Gmail帐户,特别是接收这些电子邮件?

我想将本地电子邮件存储在发送的文件夹中.

Dav*_*cic 165

Django测试框架有一些内置帮助程序,可以帮助您测试电子邮件服务.

来自docs的示例(简短版本):

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

class EmailTest(TestCase):
    def test_send_email(self):
        mail.send_mail('Subject here', 'Here is the message.',
            'from@example.com', ['to@example.com'],
            fail_silently=False)
        self.assertEqual(len(mail.outbox), 1)
        self.assertEqual(mail.outbox[0].subject, 'Subject here')
Run Code Online (Sandbox Code Playgroud)

  • +1好答案.但是当我不能使用`send_mail`时,它对复杂的情况没用. (3认同)
  • @pymarco 如果你从核心导入邮件,即使 `send_mail` 在别处执行,`mail.outbox[0].body` 也会向你显示发送的电子邮件。 (3认同)
  • 更准确地说,文档在这里:https://docs.djangoproject.com/en/1.8/topics/email/#in-memory-backend (2认同)
  • 如果你测试一个调用send_mail的函数而你无法访问`mail`,你会怎么做? (2认同)
  • @MatthewDrill当你在另一个函数中调用`send_mail`时,你仍然可以访问`mail.outbox`. (2认同)

Ber*_*ant 39

您可以使用文件后端发送电子邮件,这是一个非常方便的开发和测试解决方案; 电子邮件不会发送,但存储在您可以指定的文件夹中!


kir*_*ril 12

如果您进行单元测试,最好的解决方案是使用django提供的内存后端.

EMAIL_BACKEND = 'django.core.mail.backends.locmem.EmailBackend'
Run Code Online (Sandbox Code Playgroud)

以使用它作为py.test夹具为例

@pytest.fixture(autouse=True)
def email_backend_setup(self, settings):
    settings.EMAIL_BACKEND = 'django.core.mail.backends.locmem.EmailBackend'  
Run Code Online (Sandbox Code Playgroud)

在每次测试中,mail.outbox都会通过服务器重置,因此测试之间没有副作用.

from django.core import mail

def test_send(self):
    mail.send_mail('subject', 'body.', 'from@example.com', ['to@example.com'])
    assert len(mail.outbox) == 1

def test_send_again(self):
    mail.send_mail('subject', 'body.', 'from@example.com', ['to@example.com'])
    assert len(mail.outbox) == 1
Run Code Online (Sandbox Code Playgroud)


Ste*_*lim 5

对于任何不需要发送附件的项目,我使用django-mailer,它具有所有出站电子邮件的好处,直到我触发他们的发送为止,甚至在他们被发送之后,他们随后被记录 -所有这些都在管理员中可见,这使您可以轻松快速地检查您通过电子邮件发送的代码试图触发到intertubes.


Gre*_*cki 5

使用MailHog

受MailCatcher启发,易于安装。

使用Go构建-MailHog无需安装在多个平台上即可运行。


此外,它还有一个名为Jim的组件,MailHog Chaos Monkey,它使您能够测试发送的各种问题的电子邮件:

吉姆能做什么?

  • 拒绝连接
  • 限速连接
  • 拒绝身份验证
  • 拒绝发件人
  • 拒绝收件人

在此处了解更多信息。


(与原始mailcatcher不同,它在发送带有 Emoji 表情符号的电子邮件时失败了,该电子邮件使用UTF-8编码,并且在当前版本中并未得到真正修复,MailHog可以正常工作。)