Djang中的异步电子邮件发送

2024-06-25 23:29:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试如何异步发送电子邮件,这样User就不必等到email被发送。在

我已经安装了celerydjango-celery-email,并将django-celery-email添加到我的settings.py-djcelery_email。在

我还更改了数据库后端:

EMAIL_BACKEND = 'djcelery_email.backends.CeleryEmailBackend'

现在我尝试做一个动作,发送电子邮件,但它冻结,没有电子邮件发送。在

你知道该怎么办吗?在

以下是cmd的回溯:

^{pr2}$

Tags: djangopycmdbackend数据库settings电子邮件email
1条回答
网友
1楼 · 发布于 2024-06-25 23:29:33

问题

来自https://github.com/pmclanahan/django-celery-email

By default django-celery-email will use Django's builtin SMTP email backend for the actual sending of the mail.

这意味着您需要在本地运行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或类似的工具。在

相关问题 更多 >