0

我有一个 Django 应用程序,它需要监视用户向其发送电子邮件的电子邮件帐户。例如,如果发件人已经注册,它会将电子邮件的主题保存到数据库中。实际的应用程序比这个例子更复杂,所以我想设置一个 celery 任务以分布式方式在后台处理电子邮件。我已经有一个 celery 任务来异步发送电子邮件,但是有几个问题我想听听您对处理收到的电子邮件的看法:

1)后缀(或其他类似的东西)有没有办法将新电子邮件推送到python脚本?如果没有,我必须定期从 celery 轮询收件箱,对吗?

2) 确保每封电子邮件由一个且只有一个工作人员处理,以下哪个更好?

  • 让单个任务轮询收件箱,然后将工作分配给多个工作人员进行处理(例如,每个工作人员收到 N 封电子邮件)

  • 让多个工作人员轮询收件箱,每个人都收到一些电子邮件

3)轮询电子邮件收件箱,因为我可以直接访问电子邮件服务器,我认为轮询文件比通过 IMAP 轮询更有效。这样做有什么缺点吗?

我目前的方案(计划但尚未实施/测试,所以这只是一个粗略的想法......)

  • 有 N 个工作人员(比如 N=10)轮询收件箱(按文件)
  • 具有计算每封电子邮件的哈希值的功能
  • 工人 m 在以下情况下收到电子邮件:(其哈希 % N)= m。这样,每封电子邮件都由一个且只有一个工作人员处理,但问题是如果工作人员停机,某些电子邮件将永远不会被处理!如何克服这一点?

谢谢你让我知道你的意见!

4

1 回答 1

2

后缀绝对是要走的路。有关想法,请参阅以下问题和答案:

https://serverfault.com/questions/206477/processing-incoming-emails-with-python

Postfix - 如何处理收到的电子邮件?

于 2013-07-21T15:00:29.897 回答