python smtp发送邮件,收件人和发件人不显示问题

使用smtp发送邮件时,在已发送邮件列表中,收件人信息显示“收件人未填写”,在邮件详情中也没有直接显示收件人信息,发件人也为空:
发送方显示:
在这里插入图片描述
在这里插入图片描述
收件方显示:
在这里插入图片描述
解决办法:
引入email.utils模块 中的parseaddr函数和formataddr函数,用来在发送Email的时候,“美化”地址中的姓名部分。
在这里插入图片描述
在这里插入图片描述
参考demo源码:

# 粥粥yan
# 开发时间:2021/7/22 10:53
# coding:utf-8
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
# 美化”地址中的姓名部分
from email.utils import parseaddr, formataddr
msg_from = 'xxx@qq.com'
# 授权码
pwd = 'xxxxxxxx'

# 接收方邮箱
to = ['xxxx@126.com', 'xxxxx@qq.com']

# 发送邮件主题
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("smtp.qq.com", 465)
# 登录邮箱
smtObj.login(msg_from, pwd)
# 开始发送
smtObj.sendmail(msg_from, to, msg.as_string())
print("邮件发送成功")
# 关闭邮件服务器的连接
smtObj.quit()

发送方显示结果:
在这里插入图片描述
在这里插入图片描述
收件方显示:
在这里插入图片描述
Tips:其实大可不必如上去解决,直接用yagmail 这个第三方库发送,就不需要自己额外去美化发件人和收件人的信息了。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值