Класс EmailMultiAlternatives

Класс EmailMultiAlternatives наследуется от класса EmailMessage и предназначен для отправки писем, которые имеют несколько альтернативных представлений одного содержимого. Чаще всего используется для отправки HTML-писем с текстовой версией в качестве альтернативы. При создании экземпляра класса указываются тема письма, основное тело, список получателей и другие параметры, а для добавления альтернативной версии используется метод attach_alternative.

Синтаксис

pythonfrom 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:

Пример . Отправка HTML-письма

Рассмотрим базовый пример отправки письма с текстовой и HTML-версией:

pythonfrom 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)

Результат выполнения кода:

python"1"

Метод send возвращает количество успешно отправленных сообщений.

Пример . С вложениями и заголовками

Письмо может содержать вложения и дополнительные заголовки:

pythonfrom 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)

Результат выполнения кода:

python"1"

Пример . С несколькими получателями

Отправим письмо сразу нескольким пользователям:

pythonfrom 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)

Результат выполнения кода:

python"1"

Пример . Использование в представлении Django

Часто класс используется внутри представлений для отправки уведомлений:

pythonfrom 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')

Результат выполнения кода:

python"Email sent successfully"

Смотрите также

  • класс EmailMessage,
    базовый класс для создания писем
  • метод attach_alternative,
    добавляет альтернативную версию письма
  • метод send,
    отправляет созданное письмо
  • функция send_mail,
    быстрая отправка простых писем