9

我的 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()更有效吗?

4

3 回答 3

9

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

我还将消息分成大约 100-1,000 条的组,具体取决于您的服务器的功能。原因是您可以在较小的组中捕获错误以进行重试。这也会导致每个收件人有单独的电子邮件,这是理想的。密件抄送数千人并不是很好。

于 2011-12-28T17:43:40.150 回答
8

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

  • 他们将为您处理任何退订请求,因此您不必担心向不想要您的电子邮件的用户添加排除标志。
  • 您不太可能从用户的收件箱中被过滤掉垃圾邮件,或者惹恼您的托管服务提供商。

有 API 包装器可用于MailChimpCampaign Monitor等。添加挂钩以将新用户添加到邮件列表并(如果相关)删除任何删除其帐户的用户应该相当容易。

于 2011-12-28T18:00:33.833 回答
0

我认为,电子邮件密件抄送标题不能包含 10000 条记录。

于 2011-12-28T17:35:27.397 回答