【问题标题】:Sending 1000+ emails in Django在 Django 中发送 1000 多封电子邮件
【发布时间】:2011-03-29 17:48:41
【问题描述】:

这是我现在的设置:

connection = mail.get_connection()
maillist = []

# my real setup is a little more complex for-loop, but basicly I add all recipients to a list. 
for person in object_list:
    mail_subject = "Mail subject here"
    mail_body = "Mail body text...bla bla"
    email_sender = "me@example.com"
    maillist.append((mail_subject, mail_body, email_sender, [person.email]))

#send_mass_mail wants a tuple, so we convert the list
mailtuple = tuple(maillist)
mail.send_mass_mail(mailtuple, fail_silently=False, connection=connection)

但是,forloop 迭代了 1000 多个对象/人,当我尝试这种方法时,我能够发送 101 封电子邮件,然后它就停止了。任何地方都没有错误(如我所见)。

一位开发人员提到,也许 POST 的大小太大了?来自 SO 社区的任何想法?

【问题讨论】:

    标签: django django-forms django-views django-email


    【解决方案1】:

    您的 SMTP 服务器可能有一些发送限制。例如,我认为 Gmail 将外发邮件限制为 100 个收件人。

    【讨论】:

      【解决方案2】:

      正如 Micah 所建议的,您很有可能会达到服务器限制。

      一般来说,在处理大量邮件时,限制发送总是一个好主意。出于许多实际原因,包括 smtp 服务器限制,在 300 秒内每 5 秒发送 50 封邮件比同时发送 3000 封邮件要好。

      【讨论】:

      • 有没有办法在 Django 中设置这个延迟?
      • 您不必在 Django 中设置延迟。创建一个一次发送 100 封邮件的 django 脚本,并创建一个 cronjob 以每分钟点击该文件。您所要做的就是以某种方式标记已处理的地址,以防止将多条消息发送到相同的地址。
      • 另一种选择是不通过 cronjob 处理此问题,而是使用 django-celery 进行异步作业...
      【解决方案3】:

      既然您提到了 POST 限制 - 您是否在视图中发送电子邮件?我想知道您如何处理设置中取消的请求。

      我正在使用管理命令发送 1000 多份时事通讯。但是我没有使用 send_mass_mail,而是在循环中使用普通的发送方法。发送邮件大约需要 5 分钟(没有正确的计数 atm),我还没有遇到任何服务器限制。

      我的计划是改用 celery 来处理通过 Web 界面进行的发送。也许你想看看它,以防你还没有。

      http://celeryproject.org/

      【讨论】:

        猜你喜欢
        • 2018-06-15
        • 2011-02-08
        • 1970-01-01
        • 2016-07-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-17
        相关资源
        最近更新 更多