我的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()
会更有效吗?
答案 0 :(得分:7)
另一种建议:注册邮件服务并使用其API维护您的电子邮件列表并发送邮件。这种方法有两个优点:
可以使用API包装器,其中包括MailChimp和Campaign Monitor。添加钩子以将新用户添加到邮件列表并且(如果相关)删除任何删除其帐户的用户应该相当容易。
答案 1 :(得分:6)
您应该使用send_mass_mail
,因为它不会每次都关闭连接。 docs
我还会将消息分成大约100-1,000个组,具体取决于服务器的强大程度。原因是您可以捕获较小组中的错误以进行重试。这也会导致每个收件人单独发送电子邮件,这是理想的选择。 BCC成千上万的人并不是很好。
答案 2 :(得分:0)
我认为,电子邮件BCC标头不能包含10000条记录。