欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

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

发布时间:2025/4/5 51 豆豆
生活随笔 收集整理的这篇文章主要介绍了 python 发送邮件解决所有乱码问题 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

为什么80%的码农都做不了架构师?>>>   

使用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'] = subjectmsg['From'] = memsg['To'] = mailtomsg["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 Trueexcept Exception, e:print str(e)return False 

上面的程序测试过发送到Gmail,Sina,QQ,163以及HotMail,均没有乱码问题。

转载于:https://my.oschina.net/donhui/blog/522520

总结

以上是生活随笔为你收集整理的python 发送邮件解决所有乱码问题的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。