【问题标题】:Django - sending 600 emails with celery -- some are skipped?Django - 用芹菜发送 600 封电子邮件 - 有些被跳过了?
【发布时间】:2012-01-12 05:03:34
【问题描述】:

我有一个 Django 项目,需要发送大约 600 封电子邮件。我已经设置了 Celery,它在大多数情况下都有效。我将 Django 项目设置为使用我的 Google Apps(商业版——即:付费)电子邮件帐户作为发送帐户。出于测试目的,我将每封电子邮件都发送给我,而不是发送给客户。

我遇到的问题是 Celery 似乎会随机跳过列表中的人。当我开始发送所有 600 封电子邮件的过程时,Celery 开始工作,发送电子邮件(我可以看到它们出现在我的收件箱中),但我总共只收到了大约 420 封电子邮件。当 Celery 完成时,仍有 180 人左右需要电子邮件。如果我再次点击“发送电子邮件”,剩下的 180 人,它将完成工作,并且在两次尝试结束时,将向所有 600 人发送电子邮件。

为什么 Celery 会跳过人?

【问题讨论】:

  • 请分享您正在使用的代码,以便我们帮助诊断问题。
  • @free-dom:我想我可能已经解决了这个问题,但我仍在努力找出问题所在。我认为问题在于我试图通过 Gmail(Google Apps)发送太多电子邮件,太快了。结果,Gmail 有时会抱怨并停止接受新的发送请求(或类似的东西)。我将尝试配置 Celery 以限制它每分钟发送的电子邮件数量,这样 Gmail 就不会惊慌失措。如何实现这个限制是我正在做的事情。

标签: django celery


【解决方案1】:

是的,您会收到这些 gmail 错误,而且这不是特别可预测的。

您可以只使用django-mailer 代替——我这样做了,并通过让django-mailer 自动重试失败的发送尝试直到它们成功来处理这些gmail 连接错误。

查看这个 SO question 以了解更多建议您使用 django-mailer 与 celery 进行邮件的人。 Advice on Python/Django and message queues

【讨论】:

  • 为了记录,我同时使用 celery 和 django mailer。我只在电子邮件生成需要很长时间时才使用芹菜。
猜你喜欢
  • 2018-05-08
  • 2015-12-16
  • 2022-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多