Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Django中,如何将已上载到内存中的文件保存为电子邮件附件?_Django_File Upload_Email Attachments - Fatal编程技术网

在Django中,如何将已上载到内存中的文件保存为电子邮件附件?

在Django中,如何将已上载到内存中的文件保存为电子邮件附件?,django,file-upload,email-attachments,Django,File Upload,Email Attachments,我正在为我们的客户建立一个电子邮件网关,需要能够将他们上传的文件附加到电子邮件中。我正在使用EmailMultiAlternations发送电子邮件,并使用文件字段进行上传。当我试图将两者连接起来时,问题就出现了。我认为有以下逻辑 if request.method == 'POST': form = MyForm(request.POST, request.FILES) if form.is_valid(): ... email = EmailM

我正在为我们的客户建立一个电子邮件网关,需要能够将他们上传的文件附加到电子邮件中。我正在使用
EmailMultiAlternations
发送电子邮件,并使用
文件字段进行上传。当我试图将两者连接起来时,问题就出现了。我认为有以下逻辑

if request.method == 'POST':
    form = MyForm(request.POST, request.FILES)
    if form.is_valid():
        ...
        email = EmailMultiAlternatives(...)
        email.attach(request.FILES['image'])
else:
    form = MyForm()
这将导致“未提供异常消息”和调试中的以下值:

content: None
filename: <InMemoryUploadedFile: ImageFile.png (image/png)>
mimetype: None
内容:无
文件名:
mimetype:无

因此,出于某种原因,似乎没有文件内容。不知道这里发生了什么。文档中的示例将文件保存到模型中,但此处没有可保存文件的模型。理想情况下,我只想将文件内容直接传递给attach方法并发送。关于如何使这项工作顺利进行,有什么想法吗?

看起来我比我原来想象的更接近了。下面的人成功了

import mimetypes
from django.core.mail import EmailMultiAlternatives

if request.method == 'POST':
    form = MyForm(request.POST, request.FILES)
    if form.is_valid():
        ...
        file = request.FILES['image']
        email = EmailMultiAlternatives(...)
        email.attach(file.name, file.file.getvalue(), mimetypes.guess_type(file.name)[0])
else:
    form = MyForm()
这在Django文档中使用了,而我最初尝试的是第一个