2017-06-29 51 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">