【问题标题】:How does one send an email to 10,000 users in Django?如何在 Django 中向 10,000 个用户发送电子邮件?
【发布时间】:2023-04-02 04:30:01
【问题描述】:

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

【问题讨论】:

  • 请注意,您忘记检查 recipient.hasSignedUpForEmail 标志。另外,不那么幽默的是,你为什么要创建“消息”,为什么它在循环中,每次都被覆盖?

标签: django django-email django-mailer


【解决方案1】:

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

【讨论】:

  • 这是正确的。这取决于电子邮件服务,但例如 Amazon SES 在密件抄送中最多允许 50 个收件人。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2019-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-06
      • 2020-05-03
      • 2018-07-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多