Класс 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,
который добавляет файл из файловой системы