РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
659 of 818 menu

Класс EmailMessage

Класс EmailMessage применяется для создания email-сообщений с расширенными возможностями. Он позволяет управлять темой письма, телом, списком получателей, добавлять вложения и использовать различные форматы письма. Класс поддерживает как текстовый, так и HTML формат сообщений. В отличие от функций-оберток, EmailMessage предоставляет полный контроль над процессом отправки.

Синтаксис

from django.core.mail import EmailMessage message = EmailMessage( subject='Заголовок письма', body='Тело письма', from_email='sender@example.com', to=['recipient1@example.com', 'recipient2@example.com'], bcc=['bcc@example.com'], cc=['cc@example.com'], reply_to=['reply@example.com'], headers={'X-Custom-Header': 'value'}, connection=None, attachments=None, )

Обязательными параметрами являются subject, body и to. Остальные параметры необязательны и могут быть опущены.

Пример . Отправка простого письма

Давайте создадим и отправим простое текстовое письмо одному получателю:

from django.core.mail import EmailMessage message = EmailMessage( subject='Приветствие', body='Добрый день! Это тестовое письмо.', from_email='admin@mysite.com', to=['user@example.com'], ) res = message.send() print(res)

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

"1"

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

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

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

from django.core.mail import EmailMessage message = EmailMessage( subject='Новости сайта', body='Вышла новая статья о Django.', from_email='news@mysite.com', to=['user1@example.com', 'user2@example.com', 'user3@example.com'], ) res = message.send() print(res)

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

"1"

При отправке письма на несколько адресов метод send возвращает единицу, если все получатели были обработаны в рамках одного SMTP-соединения.

Пример . С вложением

Добавим к письму вложение в виде файла:

from django.core.mail import EmailMessage message = EmailMessage( subject='Отчет за месяц', body='Во вложении отчет по продажам.', from_email='report@mysite.com', to=['manager@example.com'], ) message.attach('report.pdf', b'PDF content here', 'application/pdf') res = message.send() print(res)

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

"1"

Метод attach принимает имя файла, содержимое в виде байтовой строки и MIME-тип.

Пример . С вложением из файловой системы

Прикрепим к письму файл, используя метод attach_file:

from django.core.mail import EmailMessage message = EmailMessage( subject='Документы для подписи', body='Пожалуйста, подпишите приложенные документы.', from_email='legal@mysite.com', to=['client@example.com'], ) message.attach_file('/path/to/document.pdf') res = message.send() print(res)

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

"1"

Метод attach_file автоматически определяет MIME-тип файла по его расширению.

Пример . С HTML-содержимым

Отправим письмо с HTML-форматированием, указав соответствующий заголовок:

from django.core.mail import EmailMessage message = EmailMessage( subject='Приглашение на мероприятие', body='<h1>Добро пожаловать!</h1><p>Ждем вас на конференции.</p>', from_email='events@mysite.com', to=['participant@example.com'], headers={'Content-Type': 'text/html'}, ) res = message.send() print(res)

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

"1"

Для HTML-писем необходимо явно указать заголовок Content-Type со значением text/html.

Пример . С использованием подключения

Отправим несколько писем с использованием одного SMTP-подключения для оптимизации:

from django.core.mail import EmailMessage, get_connection connection = get_connection() connection.open() messages = [] for i in range(3): message = EmailMessage( subject=f'Письмо №{i+1}', body=f'Тело письма №{i+1}', from_email='sender@mysite.com', to=[f'user{i+1}@example.com'], connection=connection, ) messages.append(message) res = connection.send_messages(messages) connection.close() print(res)

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

"3"

Метод send_messages отправляет список писем через одно подключение и возвращает количество отправленных сообщений.

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

  • метод send,
    который отправляет созданное сообщение
  • класс EmailMultiAlternatives,
    который поддерживает альтернативные версии письма
  • метод attach,
    который добавляет вложение к письму
  • метод attach_file,
    который добавляет файл из файловой системы
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить