Django HTML表单发送附件电子邮件

时间:2019-03-09 00:30:12

标签: python html django forms email

使用此导入时,我遇到以下问题

from django.core.mail.message import EmailMessage

我的代码看起来像这样:

if request.method == 'POST':
    email = EmailMessage()
    email.subject = "Test"
    email.body = mainMessage
    email.from_email = "SMTP <XXX@XXX.net>"
    email.to = [ "XXX@XXX.net" ]
    email.attach_file(file)

    email.send()

然后我用以下命令检查文件:

if 'file' in request.FILES:
    file = request.FILES['file']
else:
    file = False

这就是我的HTML外观

<form method="post" action="{% url 'myurl' %}" enctype="multipart/form-data">
                {% csrf_token %}

    <input type="file" name="file" required><br>

    <input type="submit" name="submit" value="Submit">
</form>

如果我选择一个文件,如何使它作为附件随该电子邮件一起发送?如果我删除email.attach_file(file)可以正常工作,但只能发送文本。

1 个答案:

答案 0 :(得分:0)

if request.method == 'POST' and request.FILES['file']:
    file = request.FILES['file'] 
    if (str(file.content_type) == 'image/jpeg' 
       or str(file.content_type) == 'image/png'):
        if (int(file.size) <= 5000000):
            fs = FileSystemStorage()
            filename = fs.save('YOUR_DIRECTORY/' + file.name, file)

            email = EmailMessage()
            email.subject = "XXX | Bildupload"
            email.body = mainMessage
            email.from_email = "SMTP <xxx@xxx.net>"
            email.to = ["xxx@xxx.net"]
            email.attach_file(filename)
            email.send()

            answer = 'Die Datei wurde erfolgreich hochgeladen'
            errorAnswer = ''
            return render(request, 'app/hochladen.html', {
                'answer': answer
            })
        else:
            errorAnswer = 'Der Upload hat nicht funktioniert.' 
    else:
        errorAnswer = 'Der Upload hat nicht funktioniert.'
    return render(request, 'app/hochladen.html', {
        'errorAnswer': errorAnswer
    })

如果有人想知道如何做,可以使用上面发布的代码。 您可以删除第二和第三个if语句,因为它们会检查大小和文件类型。

我找到的唯一答案是先将文件上传到服务器,然后从那里访问它。虽然我不知道在发送电子邮件并附加附件后如何将其删除。

您需要正确配置settings.py并添加/ media /文件夹。