python 邮件乱码的几种解决方法

使用python发邮件很简单,但是遇到乱码问题很烦恼。 乱码问题有几种:有发件人名称乱码,有标题乱码,也有正文乱码的问题。

要解决发件人名称乱码问题,必须使用Header,如下代码:

from email.header import Header
from = (“%soutofmemory_cn@126.com”) % (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’]两个属性,如下代码片段:

msg = MIMEText(body,format,'utf-8')
msg["Accept-Language"]="zh-CN"
msg["Accept-Charset"]="ISO-8859-1,utf-8"

解决了以上三个问题,邮件乱码问题就不存在了,下面是完整的发邮件代码:

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,均没有乱码问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值