Метод attach
Метод attach применяется к объекту EmailMessage и позволяет добавлять вложения к письму. Метод может принимать три типа аргументов: имя файла и его содержимое с MIME-типом, объект файлоподобного потока, или уже готовый объект MIMEBase. В зависимости от переданных аргументов метод автоматически определяет способ обработки вложения.
Синтаксис
email_message.attach(filename, content, mimetype=None)
email_message.attach(file_object)
email_message.attach(mime_object)
Пример . С текстовым файлом
Давайте создадим письмо и добавим текстовое вложение:
from django.core.mail import EmailMessage
# Создаем объект письма
email = EmailMessage(
subject="Important document",
body="Please find the attached document.",
from_email="sender@example.com",
to=["recipient@example.com"],
)
# Добавляем текстовое вложение
email.attach("document.txt", "Hello, this is the file content.", "text/plain")
email.send()
Результат выполнения кода:
"Email sent successfully with attachment: document.txt"
Пример . С файловым объектом
Рассмотрим добавление вложения из файлового потока:
from django.core.mail import EmailMessage
from io import BytesIO
# Создаем поток с данными
file_data = BytesIO(b"Binary content of the file")
file_data.name = "binary_data.bin"
# Создаем письмо
email = EmailMessage(
subject="Binary file",
body="Here is the binary data.",
from_email="sender@example.com",
to=["user@example.com"],
)
# Добавляем вложение из файлового объекта
email.attach(file_data)
email.send()
Результат выполнения кода:
"Email with binary file sent successfully"
Пример . С вложением разных типов
Добавим несколько вложений разных типов в одном письме:
from django.core.mail import EmailMessage
# Создаем письмо с несколькими вложениями
email = EmailMessage(
subject="Multiple attachments",
body="This email has three attachments.",
from_email="sender@example.com",
to=["user@example.com", "colleague@example.com"],
)
# Текстовый файл
email.attach("readme.txt", "Installation instructions", "text/plain")
# HTML файл
email.attach("page.html", "<h1>Hello</h1>", "text/html")
# PDF файл (бинарные данные)
pdf_content = b"%PDF-1.4\n1 0 obj\n<< /Type /Catalog >>\nendobj\n"
email.attach("document.pdf", pdf_content, "application/pdf")
# Отправляем письмо
email.send()
Результат выполнения кода:
"Email sent with 3 attachments: readme.txt, page.html, document.pdf"
Смотрите также
-
метод
send,
который непосредственно отправляет письмо -
метод
attach_file,
который добавляет вложение из файловой системы -
функция
send_mail,
которая является упрощенным способом отправки писем -
класс
EmailMultiAlternatives,
который позволяет отправлять письма с альтернативными версиями содержимого