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

dan*_*007 7 django django-mailer django-email

我的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)
Run Code Online (Sandbox Code Playgroud)

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

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

Fat*_*man 7

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

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

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


Jor*_*dan 6

您应该使用,send_mass_mail因为它不会每次都关闭连接.文档

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