我有一个Django应用程序发送电子邮件。生产服务器有一个电子邮件服务器,但我的本地盒子没有。我希望能够测试本地电子邮件的发送。有没有什么办法可以让django不通过电子邮件服务器发送,只是打印到文件或控制台?测试发送电子邮件没有电子邮件服务器
回答
您可以configure your application to use the Console Backend发送电子邮件。它将电子邮件写入标准输出而不是发送。
更改您的settings.py来加入这一行:
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
不要忘记删除它的生产。
Python有一个小小的SMTP服务器built-in。您可以在第二个控制台使用此命令启动它:
python -m smtpd -n -c DebuggingServer localhost:1025
这将简单地打印所有的控制台发送到localhost:1025
的邮件。
你必须Django的配置您的settings.py
使用此服务器:
EMAIL_HOST = 'localhost'
EMAIL_PORT = 1025
请注意,您的如果电子邮件服务器未启动时它尝试发送电子邮件,则可能会引发异常。 `fail_silently = False`是`send_mail`的默认值。 – 2013-03-26 04:16:11
尽管Daniel Hepper的回答无疑是对于所提问题的正确答案,但我更喜欢这个答案,因为这是一个通用的解决方案,无论环境如何都能正常工作。 (当然,Upvotes也是如此。) – Teekin 2017-05-09 10:20:58
您可以配置您的应用程序将电子邮件发送到临时文件而不是发送它们(类似于Daniel Hepper的回答)。
EMAIL_BACKEND = 'django.core.mail.backends.filebased.EmailBackend'
EMAIL_FILE_PATH = 'tmp/email-messages/'
这将每个新消息保存为一个单独的文件。如果您发送大量电子邮件,并且不想使用回卷,这很有用。
如果您的测试从django.test.testcases.TestCase扩展,则不需要做任何事情。 Django会将EmailBackend替换为“特殊”的。然后,你可以测试你会一直这样发:
def testMethodThatSendAEmail(self):
...
from django.core import mail
object.method_that_send_email(to='[email protected]')
self.assertEqual(len(mail.outbox), 1)
self.assertEqual(mail.outbox[0].to, ['[email protected]'])
...#etc
发件箱目标是当运行 蟒蛇manage.py测试获得注入到邮件的特殊对象。
有这个一个很酷的应用程序通过caktus https://github.com/caktus/django-email-bandit 只需添加到您的settings.py文件:
EMAIL_BACKEND = 'bandit.backends.smtp.HijackSMTPBackend'
BANDIT_EMAIL = '[email protected]'
您的电子邮件setttings..All电子邮件的顶部将被转移到“your_email例如@ .COM”
快乐编码...
这阐述了从本杰明答案。如果我没有像安装postfix,sendmail或exim这样的本地电子邮件服务器,则测试电子邮件的一种方法是运行python电子邮件服务器。您可以使用sudo端口25上运行,或只使用一个端口> 1024(保留端口):
python -m smtpd -n -c DebuggingServer localhost:1025
#sudo python -m smtpd -n -c DebuggingServer localhost:25
对于当前的Django应用程序代码的测试,您可以临时更改settings.py包括此项, botom:
EMAIL_HOST, EMAIL_PORT, EMAIL_HOST_USER, EMAIL_HOST_PASSWORD = 'localhost', 1025, None, None
现在测试您的电子邮件,或者您可以在./manage中执行此操作。PY壳像这样另一个终端窗口:
python manage.py shell
并在此代码粘贴到发送电子邮件:
from django.core.mail import send_mail
send_mail('Subject here', 'Here is the message.', '[email protected]',['[email protected]'], fail_silently=False)
无需使用任何真正的电子邮件,因为你会在你的终端看到的一切。您可以将其转储到适当的容器,如.html进行进一步测试。
- 1. 测试发送电子邮件从SharePoint没有smtp服务器
- 2. 只发送电子邮件服务器
- 3. SQL服务器:发送电子邮件
- 4. 使用Google AppEngine dev服务器发送测试电子邮件
- 5. Django测试发送电子邮件
- 6. 从测试发送电子邮件
- 7. 测试电子邮件发送
- 8. 测试电子邮件发送? - Python/Django
- 9. 电子邮件发送集成测试
- 10. 检测电子邮件发送的电子邮件客户端
- 11. 如何使用第三方电子邮件服务器发送电子邮件
- 12. Java电子邮件发送API电子邮件没有发送..挂断程序
- 13. 选择电子邮件发送服务
- 14. PHP发送电子邮件多次发送电子邮件
- 15. 无法使用PostFix邮件服务器发送电子邮件
- 16. 无法将邮件发送到电子邮件服务器
- 17. 发送电子邮件没有延迟
- 18. 电子邮件没有发送
- 19. 发送电子邮件没有GUI
- 20. phpmailer没有发送电子邮件
- 21. DTS发送电子邮件任务发送电子邮件两次
- 22. 电子邮件服务用角色4.x发送电子邮件与nodejs?
- 23. 用附件发送电子邮件到多封电子邮件
- 24. SendGrid电子邮件API,发送电子邮件附件
- 25. PHP邮件不发送电子邮件
- 26. 用PHP邮件发送电子邮件()
- 27. 电子邮件不发送
- 28. django发送电子邮件
- 29. SpringMVC发送电子邮件
- 30. aspx:发送电子邮件
您的本地盒子的操作系统在这里可能是一个有用的东西......您实际上并不需要电子邮件服务器,只需要通过SMTP端口连接到电子邮件服务器...和可能的用户/密码。 – Spacedman 2011-01-09 22:21:52
[虚拟SMTP服务器用于测试发送电子邮件的应用程序]的可能的重复(http://stackoverflow.com/questions/1006650/dummy-smtp-server-for-testing-apps-that-send-email) – 2011-04-07 18:23:36