如何在 Django 中将 pdf 文件作为附件发送

How to send pdf file as an attachment in Django

我有一个表单,用户可以在其中索取文件。他们需要输入姓名和电子邮件地址,文件将发送到该电子邮件地址。

怎么做?

我的代码如下:

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

这些文件所在的项目树如下:

我有两个问题:

  1. 第一个问题: email = request.POST.get('email') is myemail@hotmail.com, 但邮件还没有发送到那个邮箱,抄送电子邮件地址 some-email-address@gmail.com 收到邮件但附件不正确
  2. 第二个问题是附件。我的附件是 1.2MB,但我不明白它应该是什么。我得到如下信息:

知道如何解决吗?

你应该把 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

中方法的详细信息