2016-02-04 66 views
1

我用這個code來幫助我從linux服務器發送電子郵件,一切工作正常,除非如果有阿拉伯字符,所有的電子郵件將是這樣的:2YrYs9mK2KfYq9i62KfZhNix2LPZig ==電子郵件中的阿拉伯字符被解碼(Django)

注意,我使用Python 3

PS:在代碼中我行46加.encode('utf-8')因爲我曾經得到這個錯誤「STR」不支持緩衝區接口


UPDATE:

這裏就是我送使用電子郵件功能

theemail = EmailMessage(subject, message , sender_email, recipients, headers = { 
         'Reply-To': sender_email, 'Content-Type':'text/html; charset=utf-8', 
         'From':'[email protected]', 'Return-Path':sender+' <'+sender_email+'>', 
         'Organization':sender, 'MIME-Version':'1.0', 'Content-Transfer-Encoding':'8bit', 
         'X-Priority':'3', 'X-Originating-IP':request.META.get('REMOTE_ADDR'), 
         'X-Mailer':'Python/3.4', 'Message-ID':make_msgid(), 'Date':datetime.datetime.now().time()}) 

theemail.content_subtype = "html" # though I'm still seeing the <br/> tag as a string instead of giving me a new line LOL 
theemail.send() 
+4

好吧,'.encode'用於將字符串轉換爲字節,所以如果您使用它來做相反的事情,那麼您有麻煩了。請閱讀http://www.joelonsoftware.com/articles/Unicode.html你會進一步傷害你自己。 – jsbueno

+0

,但是這個答案可能比簡單地正確編碼字符更容易理解 - 它看起來像是在標題中正確標記字符集並根據約定添加男孩的問題。在hte頭文件中的非ASCII字符(如「主題」行或「從」和「到」行)必須使用不同的標記來標記其編碼。你必須發佈你的代碼,以及你得到的實際垃圾(轉換之前和轉換之後的字符(不只是'這樣' - 需要實際結果) – jsbueno

+0

@jsbueno我添加了我以前得到的問題如果有幫助,將.encode添加到代碼中 –

回答

0

我解決了這個問題的數據,我的問題是與我的代碼片段編輯的行我用來發送電子郵件

您在原始代碼中看到有ps.stdin.write(email_message.message().as_string()),我添加了.encode('utf-8')將輸出轉換爲字節!到解決我加.as_bytes()代替.as_string()

我搜索的原因這個問題,我發現,在Python3 bytes可以被解碼爲str,並str可以編碼爲bytes,但相反的是不是!