python 发送邮件解决所有乱码问题
為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??
使用python發(fā)郵件很簡(jiǎn)單,但是遇到亂碼問(wèn)題很煩惱。 亂碼問(wèn)題有幾種:有發(fā)件人名稱(chēng)亂碼,有標(biāo)題亂碼,也有正文亂碼的問(wèn)題。
要解決發(fā)件人名稱(chēng)亂碼問(wèn)題,必須使用Header,如下代碼:
from email.header import Header from = ("%s") % (Header('OutOfMemory.CN管理員','utf-8'),)通過(guò)這樣設(shè)置發(fā)件人之后,發(fā)件人的顯示就不會(huì)有亂碼的現(xiàn)象了。
郵件主題亂碼問(wèn)題
郵件主題亂碼有可能是在某些郵箱出現(xiàn),例如我遇到發(fā)給Gmail不會(huì)亂碼,但是發(fā)給sina.cn的郵箱就會(huì)亂碼。
要解決郵件主題亂碼的問(wèn)題需要保證subject必須是unicode,如下:
if not isinstance(subject,unicode):subject = unicode(subject) msg['Subject'] = subject解決郵件正文亂碼問(wèn)題
首先需要將MIMEText指定為utf-8編碼,然后還要設(shè)置msg['Accept-Language']和msg['Accept-Charset']兩個(gè)屬性,如下代碼片段:
? ?msg = MIMEText(body,format,'utf-8')msg["Accept-Language"]="zh-CN"msg["Accept-Charset"]="ISO-8859-1,utf-8"解決了以上三個(gè)問(wèn)題,郵件亂碼問(wèn)題就不存在了,下面是完整的發(fā)郵件代碼:
import smtplib from email.mime.text import MIMEText from email.header import Header #下面一行要設(shè)置成你自己的郵件服務(wù)器的地址以及用戶(hù)名密碼發(fā)件人信息 host,user,password,fromMail = smtpInfo def sendMail(mailto,subject,body,format='plain'):if isinstance(body,unicode):body = str(body)me= ("%s<"+fromMail+">") % (Header(_mailFrom,'utf-8'),)msg = MIMEText(body,format,'utf-8')if not isinstance(subject,unicode):subject = unicode(subject)msg['Subject'] = subjectmsg['From'] = memsg['To'] = mailtomsg["Accept-Language"]="zh-CN"msg["Accept-Charset"]="ISO-8859-1,utf-8"try:s = smtplib.SMTP()s.connect(host)s.login(user,password)s.sendmail(me, mailto, msg.as_string())s.close()return Trueexcept Exception, e:print str(e)return False?上面的程序測(cè)試過(guò)發(fā)送到Gmail,Sina,QQ,163以及HotMail,均沒(méi)有亂碼問(wèn)題。
轉(zhuǎn)載于:https://my.oschina.net/donhui/blog/522520
總結(jié)
以上是生活随笔為你收集整理的python 发送邮件解决所有乱码问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 编写Linux内核模块——第一部分:前言
- 下一篇: Thinkphp学习笔记-编辑工具Sub