2016-02-04 37 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,但相反的是不是!