как отправлять электронные письма всем пользователям? - PullRequest
0 голосов
/ 02 мая 2020

Как я могу отправлять электронную почту всем пользователям, когда захочу? Я создал приложение для блога и хочу отправить несколько писем о новостях и обновлениях всем пользователям, и я не знаю, как это сделать. пожалуйста, помогите мне с кодом. Я использую встроенную django пользовательскую модель для аутентификации. спасибо за ответы

Ответы [ 2 ]

0 голосов
/ 02 мая 2020

Вы можете использовать EmailMultiAlternatives документацию

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()
0 голосов
/ 02 мая 2020

Вы можете использовать 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 и т. Д. c.

Если вы хотите отправить 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>",
)

Но это будет более неэффективно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...