python 发送邮件乱码的解决方法

发布时间:2020-05-21编辑:脚本学堂
在python中发送邮件,有时会遇到乱码的问题,这个比较烦人的,本文分享下我的解决方法,希望有助于大家解决python发送邮件时的乱码问题,有需要的朋友参考下。

python发送邮件遇到的乱码问题,一般包括如下几种:
有发件人名称乱码,有标题乱码,也有正文乱码的问题。

下面我们分别来进行分析。

1,解决发件人名称乱码问题,必须使用Header。
代码:
 

复制代码 代码示例:
from email.header import Header
from = ("%s<outofmemory_cn@126.com>") % (Header('OutOfMemory.CN管理员','utf-8'),)
 

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

2,解决邮件主题的乱码问题
邮件主题乱码有可能是在某些邮箱出现,例如发给Gmail不会乱码,但是发给sina.cn的邮箱就会乱码。
解决邮件主题乱码的问题,需要保证subject必须是unicode,如下:
 

复制代码 代码示例:
if not isinstance(subject,unicode):
    subject = unicode(subject)
msg['Subject'] = subject

3,解决邮件正文乱码问题
首先,需要将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"

解决好以上三个问题,邮件乱码问题就不存在了。

完整的发邮件代码:
 

复制代码 代码示例:

#!/bin/python
#site: www.jb200.com
#
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,均无乱码问题。

您可能感兴趣的文章:
分享:python发邮件的综合实例
python邮件发送模块smtplib的实例详解
python smtplib发送邮件的例子 python使用126邮箱发送邮件
python smtplib模块发邮件(带附件)的例子
Python发送带附件的邮件的实现代码
python从文件读取邮件地址输出的例子
python使用gmail发送邮件的实例代码
python smtplib模块发送邮件的实例详解
python smtp模块发送邮件的代码
python发送邮件的脚本一例
python结合php解决发送邮件乱码的问题
python发送邮件的例子
python发送邮件的实例代码
python 发送邮件的代码