免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 10413 | 回复: 6
打印 上一主题 下一主题

求个python发邮件乱码的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-09-25 10:05 |只看该作者 |倒序浏览
代码片段如下,文件保存格式也是utf-8。
其他代码都是常规代码。
  1. #coding:utf-8

  2. msg = MIMEMultipart()  
  3. msg['From'] = "俞伯牙:yuboya@musci.com"
  4. msg['To'] =  "钟子期:zhongziqi@musci.com"
  5. msg['Subject'] = "知音难寻"

  6. #添加邮件内容  
  7. txt = MIMEText('闻弦歌而知雅意,奏高山以和流水。','plain','utf-8')
  8. msg.attach(txt)
复制代码
可以发送,但有个问题。
我这样发出去,qq邮箱接受到的 from,to,subject均是乱码,邮件内容正常。
但是gmail接受到的都是正常的。
然后我改变下
  1. msg['From'] = u"俞伯牙:yuboya@musci.com"
  2. msg['To'] =  u"钟子期:zhongziqi@musci.com"
  3. msg['Subject'] = u"知音难寻"
复制代码
这样发送,刚好反了。
qq邮箱接受到的都正常。gmail接受到的from,to,subject均是乱码,显示的是空白。


我看了下qq邮箱的默认设置: 始终使用Unicode编码发信 (建议在对方阅读邮件出现乱码时设置) 这个是没有勾选的。
gmai邮箱的默认设置:    Use Unicode (UTF-8) encoding for outgoing messages 这个也没勾选。
可这两个应该没关系,因为这都是发信设置。

请问这是什么原因呢,该怎么解决?麻烦大家给点意见。

论坛徽章:
0
2 [报告]
发表于 2010-09-25 13:18 |只看该作者
from email.header import Header

msg['From'] = "%s <yuboya@musci.com>" % Header("俞伯牙","utf-8")

论坛徽章:
0
3 [报告]
发表于 2010-09-25 15:52 |只看该作者
  1. msg["Accept-Charset"]="ISO-8859-1,utf-8"
复制代码

论坛徽章:
0
4 [报告]
发表于 2010-09-25 15:53 |只看该作者
  1. #!/usr/bin/env python
  2. #encoding=utf-8
  3. #coded by 一只死猫
  4. from email.Header import Header
  5. from email.MIMEText import MIMEText
  6. from email.MIMEMultipart import MIMEMultipart
  7. from smtplib import SMTP

  8. class Google_SMTP:
  9.         def __init__(self,user,psw):
  10.                 """
  11.                 连接SMTP服务器并登录账户
  12.                 """
  13.                 self.msg=MIMEMultipart()
  14.                 self.smtp=SMTP("smtp.googlemail.com")
  15.                 self.smtp.docmd("EHLO server")
  16.                 self.smtp.starttls()
  17.                 self.smtp.login(user,psw)
  18.                 self.msg["From"]=user
  19.        
  20.         def attach(self,path):
  21.                 """
  22.                 添加附件

  23.                 参数说明:
  24.                 path:文件路径
  25.                 """
  26.                 self.path=path
  27.                 if self.path.find("\\")!=-1:
  28.                         self.fn=self.path.split("\\")[-1]
  29.                 elif self.path.find("\/")!=-1:
  30.                         self.fn=self.path.split("\/")[-1]
  31.                 else:
  32.                         self.fn=path
  33.                 self.attachment=MIMEText(open(self.path,"rb").read(),"base64","utf-8")
  34.                 self.attachment["Content-Type"]="application/octet-stream"
  35.                 self.attachment["Content-Disposition"]='attachment;filename="%s"'%self.fn
  36.                 self.msg.attach(self.attachment)
  37.        
  38.         def sendmail(self,to,subject,txt,attach=None):
  39.                 """
  40.                 发送邮件

  41.                 参数说明:
  42.                 to:收件人
  43.                 subject:邮件标题
  44.                 txt:邮件正文
  45.                 attach:附件路径,默认为None
  46.                 """
  47.                 self.msg["Accept-Language"]="zh-CN"
  48.                 self.msg["Accept-Charset"]="ISO-8859-1,utf-8"
  49.                 txt=MIMEText(txt)
  50.                 txt.set_charset("utf-8")
  51.                 self.msg["To"]=to
  52.                 self.msg["Subject"]=subject
  53.                 self.msg.attach(txt)
  54.                 if attach!=None:
  55.                         self.attach(attach)
  56.                 self.smtp.sendmail(self.msg["From"],self.msg["To"],self.msg.as_string())
复制代码

论坛徽章:
0
5 [报告]
发表于 2010-09-25 17:22 |只看该作者
用header的方法好使。
  1. self.msg["Accept-Language"]="zh-CN"
  2. self.msg["Accept-Charset"]="ISO-8859-1,utf-8"
复制代码
这两句让我很困惑。我在我的代码中,加入那两句问题依旧。
但是我用i55m411的类,试行了一个中英文结合的例子。ok了。我就很奇怪了,比较两者代码,发现都一样啊。
然后我就注释了i55m411类的那两句,试了一个纯中文的,乱码了。然后我又对那两句打开注释。
然后在改回中英文混合的,还乱码了。
都是用qq邮箱发送,qq邮箱接受。就qq邮箱会处问题。
而且有一个很奇怪现象。
qq邮箱接收邮件后,右下角会有个提示,那个提示,不是乱码。打开邮件就是乱码。呵呵。
  1. if __name__ == '__main__':
  2.     server = QQ_SMTP('xxxx@qq.com','xxxx')
  3.     server.sendmail('xxxxx@qq.com','测试test','测试test')
复制代码
这个测试,第一次ok。

论坛徽章:
0
6 [报告]
发表于 2010-09-25 17:26 |只看该作者
本帖最后由 fengyizi 于 2010-09-25 17:30 编辑

更郁闷的事情出现了。
就那个Google_SMTP类,我改成QQ_SMTP。
测试
  1. server.sendmail('xxxxx@qq.com','测试test','测试test')
复制代码
标题如果是 ‘测试test’   测试二字必为乱码。
如果标题是 ‘你好world’ 就不是乱码。
我真的很困惑。

如图。
我还测试了标题是 '发送邮件'
收信箱倒是显示正常了。点进去。就是乱码。。。。我都没法比较了。
我的python版本是2.5.4 win7系统。

论坛徽章:
0
7 [报告]
发表于 2010-09-26 21:32 |只看该作者
现在问题是解决了。我就是不知道那奇怪的问题是什么原因,是bug么?还是腾讯服务器的问题。
大家有谁测试下么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP