You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python SMTP发信报错'list' object has no attribute 'encode'

报错根因

这个报错和你读取收件人列表、传sendmail参数的逻辑没有关系,你打印的三个入参类型都是符合要求的,问题出在你构造的MIMEMultipart邮件对象本身。
从报错追溯栈可以定位到:异常触发在message.as_string()序列化邮件内容的环节,执行到邮件头编码逻辑时,程序拿到的某个邮件头的值是列表(list)类型,但字符串编码方法encode是字符串类型独有的,列表没有这个方法,所以抛出属性错误。

常见触发场景

绝大多数情况是给邮件头赋值时传错了类型:

  • 给To/Cc/Bcc/From/Subject这类标准头赋值时,直接把读取到的邮箱列表整个传了进去,没有转成逗号分隔的字符串
  • 添加自定义邮件头时,没有把列表类型的变量转成字符串就直接赋值
快速排查方法

在调用smtp.sendmail之前,加一段遍历邮件头的代码,直接定位出问题的头字段:

# 遍历所有邮件头,找值为list类型的字段
for header_name, header_value in message.items():
    print(f"头字段名:{header_name},值类型:{type(header_value)},值:{header_value}")

找到值类型为list的头字段后,把对应值改成字符串格式即可。比如给To头赋值时,多收件人需要用逗号拼接成字符串再传入,不能直接传列表。

注:你当前循环读取txt逐个发信的逻辑是合法的,sendmail方法支持传入单个邮箱字符串作为收件人参数,这部分不需要修改。

内容的提问来源于stack exchange,提问作者bido whab

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 06:27:14