使用smtp发送邮件时,在已发送邮件列表中,收件人信息显示“收件人未填写”,在邮件详情中也没有直接显示收件人信息,发件人也为空:
发送方显示:
收件方显示:
解决办法:
引入email.utils模块 中的parseaddr函数和formataddr函数,用来在发送Email的时候,“美化”地址中的姓名部分。
参考demo源码:
# 粥粥yan# 开发时间:/7/22 10:53# coding:utf-8import smtplibfrom email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMEText# 美化”地址中的姓名部分from email.utils import parseaddr, formataddrmsg_from = 'xxx@'# 授权码pwd = 'xxxxxxxx'# 接收方邮箱to = ['xxxx@', 'xxxxx@']# 发送邮件主题subject = 'Python email tests2 V1'# 发送邮件# MIMEMultipart 类可以放任何内容msg = MIMEMultipart()content = 'hello word!'# 把内容加进去msg.attach(MIMEText(content, 'plain', 'utf-8'))# 设置邮件主题msg['Subject'] = subject# 自定义发件人和收件人信息# (可以在收到邮件的时候看到发件人和收件人信息),没设置该部分在收邮件时告知是未知发件人def _format_addr(s):addr = parseaddr(s)return formataddr(addr)# 自定义发件人名称msg['From'] = _format_addr(u'tester <%s>' % msg_from)# 自定义收件人(不定义会显示'收件人未填写')for item in to:msg['to'] = _format_addr(item)# 开始发送# 通过SSL方式发送,服务器地址和端口smtObj = smtplib.SMTP_SSL("", 465)# 登录邮箱smtObj.login(msg_from, pwd)# 开始发送smtObj.sendmail(msg_from, to, msg.as_string())print("邮件发送成功")# 关闭邮件服务器的连接smtObj.quit()
发送方显示结果:
收件方显示:
Tips:其实大可不必如上去解决,直接用yagmail 这个第三方库发送,就不需要自己额外去美化发件人和收件人的信息了。