您好,匿名用户
随意问技术百科期待您的加入

python使用smtp发送邮件的乱码问题

+2 投票

使用python使用smtp模块发邮件很简单,但是遇到乱码问题很烦恼。 乱码问题有几种:有发件人名称乱码,有标题乱码,也有正文乱码的问题。该如何解决呢?

用户头像 提问 2012年 12月26日 @ Poppy 上等兵 (395 威望)
分享到:

1个回答

+1 投票
 
最佳答案

一 发件人名称乱码问题,必须使用Header

from email.header import Header
from = ("%s<outofmemory_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"

四 python完整的邮件发送代码

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
用户头像 回复 2012年 12月26日 @ dongxldante 上等兵 (386 威望)
选中 2012年 12月26日 @Saber
提一个问题:

相关问题

0 投票
1 回复 68 阅读
0 投票
1 回复 86 阅读
0 投票
1 回复 75 阅读
用户头像 提问 2012年 12月1日 @ Gemini 上等兵 (319 威望)

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...