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

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


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)它工作得很好,但只发送文本。


慕桂英4014372
浏览 244回答 1
1回答

慕盖茨4494581

if request.method == 'POST' and request.FILES['file']:&nbsp; &nbsp; file = request.FILES['file']&nbsp;&nbsp; &nbsp; if (str(file.content_type) == 'image/jpeg'&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;or str(file.content_type) == 'image/png'):&nbsp; &nbsp; &nbsp; &nbsp; if (int(file.size) <= 5000000):&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fs = FileSystemStorage()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; filename = fs.save('YOUR_DIRECTORY/' + file.name, file)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; email = EmailMessage()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; email.subject = "XXX | Bildupload"&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; email.body = mainMessage&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; email.from_email = "SMTP <xxx@xxx.net>"&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; email.to = ["xxx@xxx.net"]&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; email.attach_file(filename)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; email.send()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; answer = 'Die Datei wurde erfolgreich hochgeladen'&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; errorAnswer = ''&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return render(request, 'app/hochladen.html', {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'answer': answer&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; })&nbsp; &nbsp; &nbsp; &nbsp; else:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; errorAnswer = 'Der Upload hat nicht funktioniert.'&nbsp;&nbsp; &nbsp; else:&nbsp; &nbsp; &nbsp; &nbsp; errorAnswer = 'Der Upload hat nicht funktioniert.'&nbsp; &nbsp; return render(request, 'app/hochladen.html', {&nbsp; &nbsp; &nbsp; &nbsp; 'errorAnswer': errorAnswer&nbsp; &nbsp; })如果有人想知道如何做到这一点,可以使用上面发布的代码。您可以删除第二个和第三个 if 语句,因为它们会检查大小和文件类型。我找到的唯一答案是首先将文件上传到服务器,然后从那里访问它。虽然我不知道如何在发送电子邮件并附加后删除它。并且您需要正确配置 settings.py 并添加一个 /media/ 文件夹。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python