美文网首页
python3 发邮件

python3 发邮件

作者: Purson | 来源:发表于2018-12-14 18:34 被阅读0次

发邮件这个常用的需求,,我在廖雪峰那里找了个例子改了一下,但是发现一些问题,主要在format_addr里面,python3不支持:
addr.encode('utf-8')))
AttributeError: 'bytes' object has no attribute 'encode'

Header(name, 'utf-8').decode(),
AttributeError: 'Header' object has no attribute 'decode'

最后解决的代码是:

def format_addr(s):
    name, addr = parseaddr(s)
    return formataddr(( \
        name, \
        addr))


def send_mail_multi(label, subject, content, logger):
        html_body = mail_template('【' + label + '】' + content) 
        
        # 初始化email
        msg = MIMEText(html_body, 'html', 'utf-8')
        msg['Subject'] = '【' + label + '】'+ subject
        msg['From'] = format_addr(u'管理员 <%s>' % MAIL_SENDER)
        msg['To'] = ''
        to_addr = []
        for i in range(len(MAIL_RECEIVERS)):
            to_addr.append(MAIL_RECEIVERS[i]['mail'])
            msg['To'] += format_addr(u'%s <%s>' % (MAIL_RECEIVERS[i]['name'], MAIL_RECEIVERS[i]['mail']))+ ','
        server = smtplib.SMTP_SSL(MAIL_SERVER, MAIL_PORT)
        server.login(MAIL_SENDER, MAIL_SENDER_PASSWORD)

        try:
          
            t_send_mail = threading.Thread(target=server.sendmail,args=(MAIL_SENDER, to_addr, msg.as_string()))
            t_send_mail.setName(label+'_mail_sending')
            t_send_mail.setDaemon(True)
            t_send_mail.start()
            t_send_mail.join()
        except Exception as perr:
            logger.info("邮件通知线程错误%s" % str(perr))
        finally:
            server.quit()
            logger.info(content+'信息邮件通知已经发送!')

相关文章

网友评论

      本文标题:python3 发邮件

      本文链接:https://www.haomeiwen.com/subject/catnhqtx.html