Метод attach_file
Метод attach_file применяется к экземпляру класса EmailMessage
и позволяет прикрепить файл к письму, указав путь к нему на файловой системе.
Метод принимает путь к файлу в качестве обязательного аргумента и автоматически
определяет MIME-тип файла для корректной отправки. Также можно указать
содержимое для заголовка Content-ID для использования файла
в HTML-части письма.
Синтаксис
email.attach_file(file_path, mimetype=None, headers=None)
Метод принимает следующие аргументы:
-
file_path(обязательный) - путь к файлу, который нужно прикрепить к письму. -
mimetype(необязательный) - MIME-тип файла. Если не указан, определяется автоматически. -
headers(необязательный) - словарь с дополнительными заголовками для вложения.
Пример
Давайте создадим письмо и прикрепим к нему файл с отчетом:
from 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()
Результат выполнения кода:
"Message sent successfully"
Пример
Давайте прикрепим файл с указанием MIME-типа и дополнительных заголовков:
from 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()
Результат выполнения кода:
"Message sent with custom headers"
Пример
Давайте прикрепим изображение для использования в HTML-части письма через Content-ID:
from 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()
Результат выполнения кода:
"HTML email with embedded image sent successfully"
Смотрите также
-
метод
attach,
который прикрепляет файл как содержимое, переданное в виде байтов -
класс
EmailMultiAlternatives,
который позволяет отправлять письма с несколькими альтернативными версиями контента -
метод
send,
который отправляет подготовленное письмо -
метод
send_mail,
который отправляет одно письмо с текстовым содержимым