AI智能
改变未来

Python发送多人邮件报错


问题现状

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

发送邮件时会报以下错误

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

问题分析

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

解决办法

方法一:

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.usermsg[\'To\'] = to

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

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

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

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

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

to_email = \"xxxxxxxxx@qq.com, xxxxxxxxx@qq.com\"
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » Python发送多人邮件报错