我正在尝试如何异步发送电子邮件,这样User
就不必等到email
被发送。在
我已经安装了celery
和django-celery-email
,并将django-celery-email
添加到我的settings.py
-djcelery_email
。在
我还更改了数据库后端:
EMAIL_BACKEND = 'djcelery_email.backends.CeleryEmailBackend'
现在我尝试做一个动作,发送电子邮件,但它冻结,没有电子邮件发送。在
你知道该怎么办吗?在
以下是cmd的回溯:
^{pr2}$
问题
来自https://github.com/pmclanahan/django-celery-email
这意味着您需要在本地运行SMTP服务器才能接受电子邮件。这就是为什么你会收到一个套接字错误-因为你没有设置任何SMTP服务器来接收电子邮件。在
可能的解决方案-当地发展
A、 启动SMTP服务器并使用自己的客户端
选项1
运行SMTP服务器和客户端的组合。 Mailcatcher这很好。在
它甚至带有django setup instructions!在
设置好,然后启动:
$ mailcatcher -fv
注意:mailcatcher需要gem(ruby包管理器)才能安装。 所以你必须先安装它。 这可能是值得的努力,因为mailcatcher工作得相当好 在浏览器选项卡中提供电子邮件的html和文本表示形式。在
对于docker用户,您可以获得mailcatcher docker image
选项2
运行您自己的SMTP服务器和独立的邮件客户端。在
例如,使用简单的python SMTP服务器 从命令行
python -m smtpd -n -c DebuggingServer localhost:1025
在django设置中:
EMAIL_HOST = 'localhost' EMAIL_HOST_USER = None EMAIL_HOST_PASSWORD = None EMAIL_PORT = 1025 EMAIL_USE_TLS = False
然后你需要设置一个客户端来接收这些电子邮件。在
B、 在您的设置中不要将SMTP用作后端
而是打印到控制台:
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
问题是格式不好。 HTML将显示为文本,这使得电子邮件很难阅读。您可以通过手动复制并粘贴到一个.html文件并在浏览器中打开它来将其输出到一个文件中,但是这会很快变得无聊。在
解决方案-持续集成服务器
使用这个让django测试客户机可以访问电子邮件,这样你就可以检查电子邮件是否已发送,通过编程检查电子邮件的内容等。
EMAIL_BACKEND = 'django.core.mail.backends.locmem.EmailBackend'
解决方案-生产服务器
您需要再次使用SMTP服务器。 您可以自己运行,也可以使用Sendgrid、Mailgun、Mandrill或类似的工具。在
相关问题 更多 >
编程相关推荐