2012-12-27 94 views
3

我從Python(Django)發送電子郵件。電子郵件主機是'smtp.gmail.com'。當我使用本地主機時,我可以在電子郵件主題中使用特殊字符。然而,現在我正在嘗試從服務器(webfaction),我收到一個錯誤「UnicodeDecodeError:'ascii'編解碼器無法解碼字節...」在電子郵件模板中,我使用十六進制代碼,但它們不適用於主題(他們沒有翻譯)。該怎麼辦?Python,發送主題爲特殊字符的電子郵件

# coding=UTF-8 
... 

subject = "æøå" 
c = {} 
t_html = loader.get_template(template_html) 
t_text = loader.get_template(template_txt) 
e = EmailMultiAlternatives(subject, t_text.render(Context(c)), from_email, [to_email]) 
e.attach_alternative(t_html.render(Context(c)), "text/html") 
e.send() 
+0

我發現這個http://stackoverflow.com/a/517974/230884對我的情況有用。值得一看。我也同意'mgibsonbr'。 'u'並不能解決所有問題。其他一些角色會失敗。 – CppLearner

+0

@CppLearner我的意思是,只使用'coding' **而不使用**也使用'u'並不總是有效。無論如何,如果環境不支持「編碼」和/或指定的編碼,它無法正確讀取源文件。最好使用十六進制代碼或'\ uXXXX'。 – mgibsonbr

+0

@mgibsonbr我想的是相反的。也許這只是我的環境。我按照你的建議完成了,但是這個組合仍然無效。所以最後,我必須使用上面鏈接的解決方案。我對unicode知之甚少(這是一種恥辱)。因此,「對我的情況有用」:)歡呼。 – CppLearner

回答

5

如果你使用的是Python 2,我建議用u前面加上你的字符串:

subject = u"æøå" 

(我知道是應該自動處理該coding「神奇評論」,但是從經驗我可以說它並不總是工作)

更新:供將來參考,確保生產環境支持開發中使用相同的編碼也很重要。對於UTF-8(它在任何地方都支持)應該沒問題,但是如果要在Windows(Cp1252)下編輯源文件,然後在UNIX服務器中進行部署,則Python解釋器可能無法讀取它們,無論是否存在coding

+0

不錯,那就是訣竅! (我可以在5分鐘內接受你的回答) – user984003

相關問題