Метод attach_file

Метод attach_file применяется к экземпляру класса EmailMessage и позволяет прикрепить файл к письму, указав путь к нему на файловой системе. Метод принимает путь к файлу в качестве обязательного аргумента и автоматически определяет MIME-тип файла для корректной отправки. Также можно указать содержимое для заголовка Content-ID для использования файла в HTML-части письма.

Синтаксис

pythonemail.attach_file(file_path, mimetype=None, headers=None)

Метод принимает следующие аргументы:

Пример

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

pythonfrom django.core.mail import EmailMessage

email = EmailMessage(
  subject='Monthly report',
  body='Please find the monthly report attached.',
  from_email='sender@example.com',
  to=['recipient@example.com'],
)
email.attach_file('/path/to/monthly_report.pdf')
email.send()

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

python"Message sent successfully"

Пример

Давайте прикрепим файл с указанием MIME-типа и дополнительных заголовков:

pythonfrom django.core.mail import EmailMessage

email = EmailMessage(
  subject='Project documentation',
  body='Documentation for the project is attached.',
  from_email='sender@example.com',
  to=['recipient@example.com'],
)
email.attach_file(
  '/path/to/documentation.pdf',
  mimetype='application/pdf',
  headers={'Content-Disposition': 'attachment; filename="project_doc.pdf"'}
)
email.send()

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

python"Message sent with custom headers"

Пример

Давайте прикрепим изображение для использования в HTML-части письма через Content-ID:

pythonfrom django.core.mail import EmailMessage

html_body = """
<html>
  <body>
    <h1>Welcome to our newsletter!</h1>
    <img src="cid:logo_1" alt="Company Logo">
  </body>
</html>
"""
email = EmailMessage(
  subject='Newsletter with image',
  body=html_body,
  from_email='sender@example.com',
  to=['recipient@example.com'],
)
email.content_subtype = 'html'
email.attach_file(
  '/path/to/logo.png',
  headers={'Content-ID': '<logo_1>'}
)
email.send()

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

python"HTML email with embedded image sent successfully"

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

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