最近写了个小程序自动检测oa的更新信息,然后以邮件的形式发出通知。其中在配置发送邮件模块的时候,无论怎么配置邮件正文都无法显示中文。我的环境是win7 x64,python3.1.1。查找资料也只有一种方法,就是添加正文msg的时候指定字符集为gb2312,如下所示:
msgText = MIMEText(plainText, 'plain','gb2312')
msgHtml = MIMEText(htmlText, 'html','gb2312')
但是这样配置出现的一个错误就是,如果plainText,htmlText值中含有中文是会出现错误提示“TypeError: must be bytes or buffer, not str”。如果不指定gb2312,又会提示ascii编码不够用。
看来问题主要是出在编码上,再试着先将plainText和htmlText编码为gb2312格式,这样果然好用。配置如下:
msgText = MIMEText(plainText.encode('gb2312'), 'plain','gb2312')
msgHtml = MIMEText(htmlText.encode('gb2312'), 'html','gb2312')
总结:
1、邮件标题使用中文:
标题做如下处理:
subject=Header(subject, 'gb2312')
2、邮件正文使用中文:
普通文本和html文本作如下处理:
msgText = MIMEText(plainText.encode('gb2312'), 'plain','gb2312')
msgHtml = MIMEText(htmlText.encode('gb2312'), 'html','gb2312')