python 發送郵件解決全部亂碼問題

使用python發郵件很簡單,可是遇到亂碼問題很煩惱。 亂碼問題有幾種:有發件人名稱亂碼,有標題亂碼,也有正文亂碼的問題。 python

要解決發件人名稱亂碼問題,必須使用Header,以下代碼:

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

相關文章
相關標籤/搜索