前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >python 发送邮件解决所有乱码问题 转

python 发送邮件解决所有乱码问题 转

作者头像
donghui
发布2019-04-19 15:13:51
发布2019-04-19 15:13:51
2.9K00
代码可运行
举报
文章被收录于专栏:donghui的博客donghui的博客
运行总次数:0
代码可运行

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

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

代码语言:javascript
代码运行次数:0
复制
from email.header import Header
from = ("%s") % (Header('OutOfMemory.CN管理员','utf-8'),)

通过这样设置发件人之后,发件人的显示就不会有乱码的现象了。

邮件主题乱码问题

邮件主题乱码有可能是在某些邮箱出现,例如我遇到发给Gmail不会乱码,但是发给sina.cn的邮箱就会乱码。

要解决邮件主题乱码的问题需要保证subject必须是unicode,如下:

代码语言:javascript
代码运行次数:0
复制
if not isinstance(subject,unicode):
    subject = unicode(subject)
msg['Subject'] = subject

解决邮件正文乱码问题

首先需要将MIMEText指定为utf-8编码,然后还要设置msg['Accept-Language']和msg['Accept-Charset']两个属性,如下代码片段:

代码语言:javascript
代码运行次数:0
复制
    msg = MIMEText(body,format,'utf-8')
    msg["Accept-Language"]="zh-CN"
    msg["Accept-Charset"]="ISO-8859-1,utf-8"

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

代码语言:javascript
代码运行次数:0
复制
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,均没有乱码问题。

(adsbygoogle = window.adsbygoogle || []).push({});

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015/10/27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 要解决发件人名称乱码问题,必须使用Header,如下代码:
  • 邮件主题乱码问题
  • 解决邮件正文乱码问题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档