在 Django 中后台发送群发邮件

3 投票
4 回答
1554 浏览
提问于 2025-04-17 07:13

我正在使用send_mass_email这个功能来给一大堆用户发送邮件。这个功能运行得很好,直到我一次发送超过200封邮件。实际上,邮件是顺利送达的,但因为发送给200多封邮件需要花费很长时间(超过2分钟),所以我收到了nginx的超时错误。

有什么好的方法可以在后台运行send_mass_mail吗?

4 个回答

1

你可以在一个单独的线程中发送邮件,比如这样:

t = threading.Thread(target=send_mass_email,
            args=[messages],
            kwargs={'fail_silently': True})
t.setDaemon(True)
t.start()

或者你也可以使用定时任务(cron)和Django的管理命令来实现哦 =)

想了解更多,可以看看这个链接:https://docs.djangoproject.com/en/dev/howto/custom-management-commands/

3

你可以看看这个叫做 django-mailer 的项目,它可以帮你实现这个功能。它是通过定时任务来完成的,而不是用任务队列。我用它已经有一段时间了,效果不错。

3

你需要把一些任务放到后台去执行,这样它们就不会阻塞网页的运行。最常用的方法之一就是使用消息队列。

Celery 是一个非常流行的分布式任务队列,配合 django-celery 应用使用起来非常简单。

首先,你需要安装 Celery,这个过程很简单,只需运行 pip install -U celery;然后选择一个它支持的消息中介。最常用的消息中介是 RabbitMQ;不过如果你想快速简单地设置,也可以使用你现有的 数据库 作为消息中介。

最后,由于这个问题是 Celery 和 Django 常见的解决方案,所以有一个叫 django-celery-email 的工具可以处理剩下的事情。

撰写回答