Как правильно вложить изображения при отправке письма по электронной почте?

Здравствуйте!
Есть код отправки отчётов с сайта по электронной почте.
def generate_mail():
    get_chart()
    today = timezone.now()
    peoples = Peoples.objects.filter(date=today, obj__is_active=True).values('obj__short_title').annotate(total_rab=Sum('rab'), total_itr=Sum('itr')).order_by('-total_rab')

    plain_text = get_template('email/email.txt')
    html_msg = get_template('email/email.html')

    d = Context({'peoples': peoples, 'today': today})

    subject, from_email, to = 'Проверка отчётов', 'some mailbox', ['list of mailboxes']
    text_content = plain_text.render(d)
    html_content = html_msg.render(d)

    msg = EmailMultiAlternatives(subject, text_content, from_email, to)
    msg.attach_alternative(html_content, "text/html")
    msg.send()


Собственно функция get_chart делает post запрос на удалённый сервис и сохраняет png файл в папку media.

Если в email.html добавить ссылку на него как<img src=''>, то почтовые клиенты блокируют картинки с удалённых серверов, нужно вручную добавлять домен в список доверенных, что не очень удобно.

Как правильно прикрепить изображение, чтобы картинка отображалась в начале письма?
  • Вопрос задан
  • 1105 просмотров
Решения вопроса 1
fox_12
@fox_12 Куратор тега Django
Расставляю биты, управляю заряженными частицами
Как вариант - перекодируйте в base64, и вставляйте прямо в тело письма:
import base64
...
my_image = '<img src="data:image/jpg;base64,{im}" />'.format(im=base64.b64encode(instance.image.read()))
...
mail_html = """
        <html>
            <head></head>
            <body>
                <h4>Заголовок письма</h4>
                {img}
                ....
            </body>
        </html>
        """.format(img=my_image)

Далее кодируете текст письма в MIME и отправляете.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@MAGistr_MTM
Учусь программировать
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы