如何向所有用户发送电子邮件?

时间:2020-05-02 08:46:39

标签: django

如何在需要时向所有用户发送电子邮件?我已经构建了一个博客应用,我想向所有用户发送一些有关新闻和更新的电子邮件,但我不知道该怎么做。请帮助我的代码。我正在使用内置的Django用户模型进行身份验证。感谢您的答复

2 个答案:

答案 0 :(得分:0)

您可以使用send_mass_mail

一个例子:

from django.contrib.auth import get_user_model
from django.core.mail import send_mass_mail

all_users = get_user_model().objects.all()
data = [
    ("Subject", "Message", "from@yourdomain.com", [user.email]
    for user in all_users
]
send_mass_mail(data)

如果用户数量不多,通常这是一种非常幼稚的方法,如果您不知道自己在做什么,则可能会将邮件服务器列入黑名单。如果您要进行群发邮件,则应使用电子邮件服务,例如mailgun,sendgrid等。

如果要发送HTML内容,则必须改用send_mail

from django.contrib.auth import get_user_model
from django.core.mail import send_mail

all_users = get_user_model().objects.all()
for user in all_users:
    send_mail(
        "Subject",
        "Text message",
        "from@yourdomain.com",
        [user.email],
        html_message="<p>HTML message</p>",
)

但这会效率更低。

答案 1 :(得分:0)

您可以使用EmailMultiAlternatives documentation

all_users = get_user_model().objects.all()
emails = [user.email for user in all_users]
subject, from_email, to = 'hello', 'from@example.com', 'to@example.com'
text_content = 'This is an important message.'
html_content = '<p>This is an <strong>important</strong> message.</p>'
msg = EmailMultiAlternatives(subject, text_content, from_email, emails)
msg.attach_alternative(html_content, "text/html")
msg.send()