使用python發郵件很簡單,可是遇到亂碼問題很煩惱。 亂碼問題有幾種:有發件人名稱亂碼,有標題亂碼,也有正文亂碼的問題。 python
from email.header import Header from = ("%s") % (Header('OutOfMemory.CN管理員','utf-8'),)
經過這樣設置發件人以後,發件人的顯示就不會有亂碼的現象了。 服務器
郵件主題亂碼有多是在某些郵箱出現,例如我遇到發給Gmail不會亂碼,可是發給sina.cn的郵箱就會亂碼。 測試
要解決郵件主題亂碼的問題須要保證subject必須是unicode,以下: 編碼
if not isinstance(subject,unicode): subject = unicode(subject) msg['Subject'] = subject
首先須要將MIMEText指定爲utf-8編碼,而後還要設置msg['Accept-Language']和msg['Accept-Charset']兩個屬性,以下代碼片斷: spa
msg = MIMEText(body,format,'utf-8') msg["Accept-Language"]="zh-CN" msg["Accept-Charset"]="ISO-8859-1,utf-8"
解決了以上三個問題,郵件亂碼問題就不存在了,下面是完整的發郵件代碼: code
import smtplib from email.mime.text import MIMEText from email.header import Header #下面一行要設置成你本身的郵件服務器的地址以及用戶名密碼發件人信息 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'] = subject msg['From'] = me msg['To'] = mailto msg["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 True except Exception, e: print str(e) return False
上面的程序測試過發送到Gmail,Sina,QQ,163以及HotMail,均沒有亂碼問題。 orm