2012-12-23 186 views
3

我想用django發送一封電子郵件,我希望電子郵件的body包含來自.txt文件的內容。我從我的模板中導入。我經歷了docs,但我沒有找到如何去做。用send_mail發送.txt。 Django

以下是我在我的views.py:

send_mail('TEST', 'myfile.txt', '[email protected]', [[email protected]], fail_silently=False) 

我嘗試添加myfile.txt到我的模板目錄。但是,當我用send_mail()中的替換'myfile.txt'時,我當然得到了一個錯誤,因爲myfile.txt不是定義的變量。任何想法如何我可以做到這一點?

回答

2

如果你希望你的電子郵件的正文是的myfile.txt的內容,那麼(假設myfile.txt存儲在media > files > myfile.txt):

from mysite.settings import MEDIA_ROOT 
import os 

file = open(MEDIA_ROOT + os.path.sep + 'files/myfile.txt', 'r') 
content = file.read() 
file.close() 

# EmailMessage class version 
mail = EmailMessage('subject', content, '[email protected]', ['[email protected]']) 
mail.send() 

# send_mail version 
send_mail('TEST', content, '[email protected]', [[email protected]], fail_silently=False) 
+0

謝謝。我試圖使用:mail.attach_file('/ files/myfile.txt')但我必須使用絕對路徑嗎?如果不是,那麼根目錄是什麼? – Marcolac

+0

@Marcolac請檢查我的更新答案。 –

+0

好吧,它的作品。謝謝。但我認爲我的問題還不夠清楚。我希望我的郵件正文是.txt,我不想被附上... – Marcolac

3

你需要的是render_to_string

from django.template.loader import render_to_string 
body = render_to_string('myfile.txt', foovars) 
send_mail('TEST', body, '[email protected]', [[email protected]], fail_silently=False) 

其中foovars是一個字典,需要在「模板」中呈現的值myfile.txt如果繼續,當然,否則{}

請確保您的myfile.txt位於您的模板目錄下,即全部;-)

+1

與其他人相比,這個答案很簡單。它對我使用django 1.6非常有用。 – teewuane