Класс EmailMultiAlternatives
Класс EmailMultiAlternatives наследуется от класса EmailMessage и предназначен для отправки писем, которые имеют несколько альтернативных представлений одного содержимого. Чаще всего используется для отправки HTML-писем с текстовой версией в качестве альтернативы. При создании экземпляра класса указываются тема письма, основное тело, список получателей и другие параметры, а для добавления альтернативной версии используется метод attach_alternative.
Синтаксис
from django.core.mail import EmailMultiAlternatives
email = EmailMultiAlternatives(
subject='subject',
body='plain text body',
from_email='sender@example.com',
to=['recipient@example.com'],
bcc=None,
connection=None,
attachments=None,
headers=None,
cc=None,
reply_to=None
)
Аргументы конструктора класса EmailMultiAlternatives:
subject- тема письма (строка)body- основной текст письма (строка)from_email- адрес отправителя (строка)to- список получателей (список строк)bcc- скрытые получатели (список строк)connection- соединение с почтовым серверомattachments- вложения (список кортежей)headers- дополнительные заголовки (словарь)cc- копии получателей (список строк)reply_to- адрес для ответа (список строк)
Пример . Отправка HTML-письма
Рассмотрим базовый пример отправки письма с текстовой и HTML-версией:
from django.core.mail import EmailMultiAlternatives
subject = 'Welcome to our service'
text_body = 'Welcome! Please visit our website.'
html_body = '<h1>Welcome!</h1><p>Please visit our <a href="https://example.com">website</a>.</p>'
email = EmailMultiAlternatives(
subject=subject,
body=text_body,
from_email='noreply@example.com',
to=['user@example.com']
)
email.attach_alternative(html_body, 'text/html')
res = email.send()
print(res)
Результат выполнения кода:
"1"
Метод send возвращает количество успешно отправленных сообщений.
Пример . С вложениями и заголовками
Письмо может содержать вложения и дополнительные заголовки:
from django.core.mail import EmailMultiAlternatives
subject = 'Report for Q1 2026'
text_body = 'Please find the report attached.'
html_body = '<h1>Report Q1 2026</h1><p>Please find the report attached.</p>'
email = EmailMultiAlternatives(
subject=subject,
body=text_body,
from_email='reports@example.com',
to=['manager@example.com'],
headers={'X-Priority': '1'},
attachments=[('report.txt', 'This is report content.', 'text/plain')]
)
email.attach_alternative(html_body, 'text/html')
res = email.send()
print(res)
Результат выполнения кода:
"1"
Пример . С несколькими получателями
Отправим письмо сразу нескольким пользователям:
from django.core.mail import EmailMultiAlternatives
subject = 'Important update'
text_body = 'Please read the update.'
html_body = '<h1>Update</h1><p>Please read the update.</p>'
email = EmailMultiAlternatives(
subject=subject,
body=text_body,
from_email='updates@example.com',
to=['user1@example.com', 'user2@example.com'],
cc=['admin@example.com']
)
email.attach_alternative(html_body, 'text/html')
res = email.send()
print(res)
Результат выполнения кода:
"1"
Пример . Использование в представлении Django
Часто класс используется внутри представлений для отправки уведомлений:
from django.core.mail import EmailMultiAlternatives
from django.http import HttpResponse
from django.template.loader import render_to_string
def send_notification(request):
subject = 'Notification'
context = {'user': 'John', 'message': 'Your order is ready.'}
text_body = render_to_string('email/notification.txt', context)
html_body = render_to_string('email/notification.html', context)
email = EmailMultiAlternatives(
subject=subject,
body=text_body,
from_email='noreply@example.com',
to=['john@example.com']
)
email.attach_alternative(html_body, 'text/html')
email.send()
return HttpResponse('Email sent successfully')
Результат выполнения кода:
"Email sent successfully"
Смотрите также
-
класс
EmailMessage,
базовый класс для создания писем -
метод
attach_alternative,
добавляет альтернативную версию письма -
метод
send,
отправляет созданное письмо -
функция
send_mail,
быстрая отправка простых писем