发邮件这个常用的需求,,我在廖雪峰那里找了个例子改了一下,但是发现一些问题,主要在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+'信息邮件通知已经发送!')
网友评论