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

在Databricks用Python发HTML邮件报错‘list’对象无‘encode’属性

问题根源

错误直接触发原因是你给MIMEText传入的第一个参数messageHTML是列表类型,而MIMEText要求输入字符串类型,系统尝试调用字符串的encode方法编码内容时,列表没有这个方法就抛出了报错。除此之外你的代码还有另外3处逻辑错误,同步修复即可:

  • messageHTML定义为了列表,需要拼接为完整字符串
  • sendEmail函数参数设计不合理,当前直接硬编码调用全局变量messageHTML,没有使用传入的text参数
  • 函数要求receivers是列表类型,但你调用时传入的to_addr是单个字符串,执行', '.join(receivers)时会把字符串拆成单个字符拼接,导致收件人错误
  • 调用sendEmail时传入的第四个参数text没有提前定义,属于无效变量

修复后代码

Cmd1修改后内容

import smtplib
from email import encoders
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.mime.application import MIMEApplication

def sendEmail(sender, receivers, subject, html_content):
  msg = MIMEMultipart()  
  msg['From'] = sender
  msg['BCC'] = ', '.join(receivers)
  msg['Subject'] = subject
  # 改用函数传入的html内容参数,移除硬编码全局变量逻辑
  msg.attach(MIMEText(html_content, 'html'))
  text = msg.as_string()
  smtpObj = smtplib.SMTP('mySMTP')
  
  smtpObj.sendmail(sender, receivers, text)

Cmd2修改后内容

from_addr = 'addr1@mail.com'
# 收件人统一改为列表格式,单个收件人也放在列表中
to_addr = ['addr2@mail.com']

# 把列表拼接为完整的HTML字符串
messageHTML = ''.join([
  "<center><h1>Example Email Title</h1></center>",
  """
  <p><b>A standard paragraph.</b></p>
  <ol>
      <li>This demonstrates a list.</li>
  </ol>
  """
])

Cmd3修改后内容

# 传入正确的HTML内容变量
sendEmail(from_addr, to_addr, "My Email Subject Line", messageHTML)

修改完成后依次运行3个命令段即可正常发送HTML格式邮件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:09:02