Метод attach

Метод attach применяется к объекту EmailMessage и позволяет добавлять вложения к письму. Метод может принимать три типа аргументов: имя файла и его содержимое с MIME-типом, объект файлоподобного потока, или уже готовый объект MIMEBase. В зависимости от переданных аргументов метод автоматически определяет способ обработки вложения.

Синтаксис

pythonemail_message.attach(filename, content, mimetype=None)
email_message.attach(file_object)
email_message.attach(mime_object)

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

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

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

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

python"Email sent successfully with attachment: document.txt"

Пример . С файловым объектом

Рассмотрим добавление вложения из файлового потока:

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

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

python"Email with binary file sent successfully"

Пример . С вложением разных типов

Добавим несколько вложений разных типов в одном письме:

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

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

python"Email sent with 3 attachments: readme.txt, page.html, document.pdf"

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

  • метод send,
    который непосредственно отправляет письмо
  • метод attach_file,
    который добавляет вложение из файловой системы
  • функция send_mail,
    которая является упрощенным способом отправки писем
  • класс EmailMultiAlternatives,
    который позволяет отправлять письма с альтернативными версиями содержимого