使用python发邮件乱码问题有几种:发件人名称乱码,标题乱码,正文乱码的问题。
一、发件人名称乱码问题
必须使用Header,代码:
通过这样设置发件人之后,发件人的显示就不会有乱码的现象了。
二、邮件主题乱码问题
邮件主题乱码有可能是在某些邮箱出现,例如发给Gmail不会乱码,但是发给sina.cn的邮箱就会乱码。
解决邮件主题乱码的问题,要保证subject必须是unicode,如下:
三、邮件正文乱码问题
首先,将MIMEText指定为utf-8编码,然后设置msg['Accept-Language']和msg['Accept-Charset']两个属性。
代码片段:
解决以上三个问题,邮件乱码问题即可消失。
完整的发邮件代码:
#!/usr/bin/env python
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,均无邮件乱码问题。