Python Email应用的中文乱码问题解决方法

或者是对python的unicode理解得不透彻,时常遇到各种各样的中文乱码问题,今天,在email应用中,中文乱码又出来捣乱了,经过一段时间的误打误撞,搞出了一个解决方法:

 

# -*- coding: utf-8 -*-
'''
Created on 2010-6-21

@author: Administrator
'''

import email
from email.MIMEText import MIMEText
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email import encoders
import smtplib
import mimetypes

 

from_addr = 'qgb@123.com'
to_addr = 'kbx@123.com'
subject_header = 'Subject: 巡检报告'
attachment = u'e:/python/数据库巡检记录表.xls' #文件访问时候要求u,否则不能通过
body = '''巡检报告'''

 

m = MIMEMultipart()
m["To"] = to_addr
m["From"] = from_addr
m["Subject"] = subject_header
ctype, encoding = mimetypes.guess_type(attachment)
print ctype, encoding
maintype, subtype = ctype.split('/', 1)
print maintype, subtype

m.attach(MIMEText(body, 'plain', 'utf-8')) #明确body的编码是utf-8

 

fp = open(attachment, 'rb')
msg = MIMEBase(maintype, subtype)
msg.set_payload(fp.read())
fp.close()


encoders.encode_base64(msg)
msg.add_header("Content-Disposition", "attachment", filename='巡检报告.xls')
#encoders.encode_base64(msg) #将http头信息再进行一次编码,否则附件的中文名不能用

#上面一句有误
m.attach(msg)

s = smtplib.SMTP('mail.123.com')
s.set_debuglevel(1)
s.sendmail(from_addr, to_addr, m.as_string())
s.quit()

 

 

参考资料:

1、Python for UNIX and Linux System Administration, Noab Gift & Jeremy M.Jones, P147-150

2、通过Google找到的网络各兄弟姐妹的Blogs(这里不一一列举,但要一块感谢-^_^-)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值