Как отправить файл PDF в виде вложения в Django - PullRequest
0 голосов
/ 01 июня 2018

У меня есть форма, где пользователь может запросить документ.Им нужно ввести имя и адрес электронной почты, и документ будет отправлен на этот адрес электронной почты.

Как это сделать?

Мой код выглядит следующим образом:

if download_form.is_valid():
        ln_go = get_lang_code(request, request.GET.get('lang'))
        file_to_be_sent = "/assets/documents/case_study" + ln_go + ".pdf"
        name = request.POST.get('name')
        email = request.POST.get('email')

        msg = EmailMultiAlternatives('Het aangevraagde document',
                                     'Geachte {0}, <br/><br />In bijlage sturen wij u het aangevraagde document door. <br /><br />Met vriendelijke groeten, <br /><br /> Het Autralis team'.format(name),
                                     'no-reply@autralis.com',
                                     [email, ], # TO
                                     ['some-email-address@gmail.com', ]) # cc
        msg.content_subtype = "html"  # Main content is now text/html
        msg.attach("case_study.pdf", file_to_be_sent, "application/pdf")
        msg.send()

И дерево проекта, в котором находятся эти документы, выглядит следующим образом:

enter image description here

У меня две проблемы:

  1. Первая проблема : email = request.POST.get ('email')myemail@hotmail.com,, но письмо не было отправлено на этот адрес электронной почты, адрес электронной почты cc some-email-address@gmail.com получил письмо, но вложение неверно
  2. Вторая проблема - это вложение.Мое вложение составляет 1,2 МБ, но я не понимаю, каким он должен быть.Я получаю что-то следующим образом:

enter image description here

Есть идеи, как это решить?

1 Ответ

0 голосов
/ 01 июня 2018

Вы должны поместить content в методе присоединения:

import os
from django.conf import settings

file_to_be_sent = "assets/documents/case_study{}.pdf".format(ln_go)
file_to_be_sent = os.path.join(settings.BASE_DIR, file_to_be_sent)
with open(file_to_be_sent) as f:
    msg.attach("case_study.pdf", f.read(), "application/pdf")

или использовать метод attach_file

msg.attach_file(file_to_be_sent)

для методов в EmailMessage

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...