2017-06-29 52 views
0

我想用附件发送一封邮件,使用Django,附件从用户提交的表单发送到服务器。我的代码如下所示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() 

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

回答

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

我相信你需要使用attach_file而不是attach。 attach_file允许你传递一个路径,而你需要传递带有附加的实际数据。请参阅docs

此外,测试你的附件实际上得到上传,您指定正确的加密类型的形式等。例如:

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