zoukankan      html  css  js  c++  java
  • python 发邮件乱码

    来自:http://outofmemory.cn/code-snippet/1464/python-send-youjian-resolve-suoyou-luanma-question

    使用python发邮件很简单,但是遇到乱码问题很烦恼。 乱码问题有几种:有发件人名称乱码,有标题乱码,也有正文乱码的问题。

    要解决发件人名称乱码问题,必须使用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"

    解决了以上三个问题,邮件乱码问题就不存在了,下面是完整的发邮件代码:

    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,均没有乱码问题。

  • 相关阅读:
    1038 Recover the Smallest Number (30分) sort-cmp妙用(用于使字符串序列最小)
    1033 To Fill or Not to Fill (25分)贪心(???)
    1030 Travel Plan (30分) dij模板题
    1020 Tree Traversals (25分)(树的构造:后序+中序->层序)
    1022 Digital Library (30分) hash模拟
    1018 Public Bike Management (30分)(Dijkstra路径保存fa[]+DFS路径搜索)
    1017 Queueing at Bank (25分)模拟:关于事务排队处理
    1014 Waiting in Line (30分)队列模拟题
    1010 Radix (25分)暴力猜数or二分猜数
    HDU 3032 multi-sg 打表找规律
  • 原文地址:https://www.cnblogs.com/ppsunlight/p/4846781.html
Copyright © 2011-2022 走看看