异步发送电子邮件的简单方法



我正在运行一个django应用程序,当发生一些事件时,我想向收件人列表发送电子邮件。

我知道使用Celery是一个明智的选择,但我想知道是否有另一种最简单的方法可以做到这一点,而无需安装代理服务器、主管来处理后台运行的守护进程。。。

我想找到一种更简单的方法来做它,并在需要时把它换成芹菜。我不负责生产服务器,我知道运行它的人在设置所有配置时会遇到很大的麻烦。我正在考虑启动一个django命令,该命令使用多处理库或类似的东西打开几个进程。

这通常是队列的一个很好的用例。如果您不想在本地运行队列服务器(如Celery),您有几个选项。

  1. 有许多SaaS队列服务,如亚马逊SQS(以及其他任何数量的服务),您可以连接到您的应用程序中,而不需要在您的机器上运行额外的服务。

  2. 您可以使用数据库和cron作业来实现一种"穷人队列"。在这种情况下,当您的事件发生时,您可以将一些信息插入数据库。然后,您可以让cron作业启动一个管理命令,该命令扫描您的"排队消息"表并定期发送电子邮件。请注意,只有当你的消息队列保持相对较小时,这才真正有效——如果你有这么多消息要发送,你就必须开始考虑让多个进程发送消息,这就打开了排队系统首先要解决的问题。

如果您不想实现celeni(在我看来,设置起来并不困难),那么您最好的选择可能是使用任一数据库实现一个非常简单的队列。它可能会按照以下方式工作:

  1. 系统确定需要发送电子邮件,并在数据库中创建一行,状态为"已创建"或"已排队">
  2. 另一方面,将有一个进程定期扫描您的"队列"。如果他们找到任何要发送的内容(在这种情况下,任何状态为"已创建/已排队"的行),他们将更新状态为"正在发送"。然后,该过程将继续发送电子邮件,并最终更新状态为已发送

这将负责异步发送对象,并在出现问题时跟踪所有电子邮件的状态。

如果额外的更新对数据库的负担也太大,那么您可能会为队列使用Redis后端。

最新更新