Django邮件附件是空白的

时间:2017-06-29 16:12:45

标签: python django django-models django-forms django-templates

我正在尝试使用Django发送带附件的邮件,附件从用户提交的表单发送到服务器。我的代码如下所示

 form = RequestForm(request.POST, request.FILES)
 if form.is_valid():
        form.save()
        messages.info(request, '')
        subject = ''
        message = ""
        attachment = request.FILES['attachment']
        mail = EmailMessage(subject, message, '', [''])
        mail.attach(filename=attachment.name, mimetype=attachment.content_type, content=attachment.read())
        mail.send()

我收到邮件,但邮件中的附件是空白的,即它不包含任何内容。我在这里缺少什么?

2 个答案:

答案 0 :(得分:1)

我已经解决了这个问题,我将form.save()放在底部,即发送邮件后问题解决了。这是因为,一旦我们使用form.save(),附件就会存储在它的路径中,我们需要在读取它之前打开它。

form = RequestForm(request.POST, request.FILES)
if form.is_valid():
        messages.info(request, '')
        subject = ''
        message = ""
        attachment = request.FILES['attachment']
        mail = EmailMessage(subject, message, '', [''])
        mail.attach(filename=attachment.name, mimetype=attachment.content_type, content=attachment.read())
        mail.send()
        form.save()

答案 1 :(得分:0)

我相信你需要使用attach_file而不是attach。 attach_file允许您传递路径,而您需要使用attach传递实际数据。请参阅docs

另外,请测试您的附件是否实际上传,您在表单上指定了正确的enctype等。例如:

<form enctype="multipart/form-data" action="/whatever/" method="post">