Python发送多人邮件报错

1|0问题现状

to_email = ['***@qq.com','***@qq.com']

发送邮件时会报以下错误

AttributeError: ‘list’ object has no attribute ‘encode’ )

2|0问题分析

列表没有encode的属性,原因是提取列表中的某个邮箱时,它依然还是列表类型,所以我们需要将它转换成字符串类型。因为字符串是可以使用encode方法。

3|0解决办法

方法一:

to_email = ["xxxxxxxxx@qq.com", "xxxxxxxxx@qq.com"]
msg['To'] = ','.join(to_email )

这么发貌似没有问题,但实际上只有第一个人收到邮件了,其他人都没有收到。
究其原因,是Python的smtplib模块中,发送对象和实际发送对象是两种格式的数据。发生对象格式必须是字符串,实际发送的格式则是列表。

msg = MIMEMultipart()
msg['Subject'] = Header(subject, 'utf-8')
msg['From'] = self.user
msg['To'] = to

发送的对象格式按如下修改成字符串格式

msg = MIMEMultipart()
msg['Subject'] = Header(subject, 'utf-8')
msg['From'] = self.user
msg['To'] = ','.join(to)

实际发送的格式依然按照之前定义的列表格式

users = [***@qq.com,***@qq.com]
smtp.sender(to=users, attachments=report_abspath)

然后大功告成,所有人都收到了邮件和附件。
方法二:
按照上面的格式进行处理也是可以成功的,具体我就不试了。
思路:按下列字符串格式进行填写用户列表,然后实际发送的时候转换成列表即可。

to_email = "xxxxxxxxx@qq.com, xxxxxxxxx@qq.com"

方法三:
上面的方法使用还是有收不到的情况,于是又查询了一下资料有三个关键点需要注意

关键点1:msg_to=['abc@163.com','dhsjkbsh@qq.com','123463255@qq.com'],以列表的方式给出。
关键点2:msg['To'] =','.join(msg_to)。
关键点3:s.sendmail(msg_from, msg['To'].split(','), msg.as_string())

于是我修改了这三个关键的代码果然多个邮箱成功收到了


__EOF__

本文作者Harry
本文链接https://www.cnblogs.com/harry66/p/14176607.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Harry_666  阅读(391)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示