如何在Django中向10,000个用户发送电子邮件?

时间:2011-12-28 17:23:34

标签: django django-email django-mailer

我的Django应用程序有10,000个用户,都有电子邮件。我想发一封电子邮件给所有人说一个月一次。此消息可能包含一些pdf附件。

我尝试过使用EmailMessage对象向所有人发送电子邮件。我在发送之前将所有用户的电子邮件地址添加到此EmailMessage的密件抄送组件中。

        recList = []
        for recipient in rec:
            reci = str.strip(str(recipient))
            recList.append(reci)
            message = (form.cleaned_data['subject'], form.cleaned_data['message'], 'emailAdmin@yahoo.com', recList)
        mail = EmailMessage(form.cleaned_data['subject'], form.cleaned_data['message'], 'email_manager@mysite.org', ['email_list@mysite.org'], recList)
        num_attachments = 0
        if form.cleaned_data['attachment'] != None:
            email_attachment = EmailAttachment(
                document_name = form.cleaned_data['attachment'].name,
                email_message = email,
                document = form.cleaned_data['attachment'],
            )
            email_attachment.save()
            mail.attach_file(settings.MEDIA_ROOT + "/" + email_attachment.document.name)
        mail.send(fail_silently=False)

但是,当我发送电子邮件时,Django抱怨“连接已重置”并且不发送。我假设服务器连接已关闭。

在Django中发送大量电子邮件爆炸的有效方法是什么? send_mass_mail()会更有效吗?

3 个答案:

答案 0 :(得分:7)

另一种建议:注册邮件服务并使用其API维护您的电子邮件列表并发送邮件。这种方法有两个优点:

  • 他们会为您处理任何取消订阅请求,因此您无需担心向不想要您的电子邮件的用户添加排除标记。
  • 您不太可能从用户的收件箱中滤除垃圾邮件,或者惹恼您的托管服务提供商。

可以使用API​​包装器,其中包括MailChimpCampaign Monitor。添加钩子以将新用户添加到邮件列表并且(如果相关)删除任何删除其帐户的用户应该相当容易。

答案 1 :(得分:6)

您应该使用send_mass_mail,因为它不会每次都关闭连接。 docs

我还会将消息分成大约100-1,000个组,具体取决于服务器的强大程度。原因是您可以捕获较小组中的错误以进行重试。这也会导致每个收件人单独发送电子邮件,这是理想的选择。 BCC成千上万的人并不是很好。

答案 2 :(得分:0)

我认为,电子邮件BCC标头不能包含10000条记录。