Django:异步发送电子邮件

时间:2020-10-29 12:57:21

标签: django email asynchronous

我有一个Django应用程序,该应用程序具有订购物料的形式。提交表单后,您应该被转发到确认站点,同时还应该发送两封电子邮件。

通过Django发送电子邮件不是问题

send_mail(subject, plain_message, from_email, [order.customer.email], html_message=html_message)

但是它似乎不是以异步的方式发生,因为它需要一些时间。

我只想调用我的send_email方法,让发送异步处理,然后继续转发。

我将如何实现这一目标,我有什么样的可能性?我是Django / Python的新手,但我想创建一个Thread或类似的东西吗?这种情况下的最佳做法是什么?

1 个答案:

答案 0 :(得分:0)

如注释中所建议,您需要实现任务队列和工作程序。在我的项目中,我使用django-rq和Redis。

在此处查看仓库:https://github.com/rq/django-rq

然后您可以将send_mail函数推入队列,如示例所示:

import django_rq

# process stuff here

# queue the email for sending
django_rq.enqueue(send_mail, subject, plain_message, from_email, [order.customer.email], html_message=html_message)

但是请确保您还需要在后台有一个工作人员来实际处理队列中的项目。