Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1090814
  • 博文数量: 321
  • 博客积分: 7872
  • 博客等级: 少将
  • 技术积分: 2120
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-16 09:06
文章分类

全部博文(321)

文章存档

2017年(1)

2016年(1)

2015年(12)

2014年(17)

2013年(78)

2012年(15)

2011年(17)

2010年(67)

2009年(102)

2008年(11)

分类: LINUX

2013-06-19 15:17:53

使用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']两个属性,如下代码片段:

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

 

转自:

阅读(1444) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~