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

Python发送邮件报SMTP实例无send_message属性错误

问题根因

该报错和Gmail 2FA配置、应用密码授权没有关联,核心原因是运行脚本的Python版本过低:smtplib.SMTP类的send_message()方法是Python 3.2版本才新增的API,Python 2全系列、Python 3.0/3.1版本均未实现该方法,调用时就会触发属性不存在的错误。

修复方法

不需要升级Python环境,直接将send_message()调用替换为全版本兼容的sendmail()写法即可,同时修复原代码里两处会导致邮件显示异常的问题:

  • 正文部分\Your Management的反斜杠为无效转义符,会导致正文排版错乱
  • 附件的Content-Disposition头末尾缺少闭合双引号,部分邮件客户端无法正常识别附件

修复后的完整代码

MY_ADDRESS = "****@gmail.com"         # 发件人Gmail地址
MY_PASSWORD = "****Password****"      # Gmail 2FA生成的应用专用密码
RECIPIENT_ADDRESS = ['****@gmail.com', '****@gmail.com']  # 收件人地址列表

HOST_ADDRESS = 'smtp.gmail.com'   
HOST_PORT = 587                         

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
from email.mime.text import MIMEText


# 与Gmail SMTP服务器建立连接
server = smtplib.SMTP(host=HOST_ADDRESS, port=HOST_PORT)
server.starttls()
server.login(MY_ADDRESS, MY_PASSWORD)

# 初始化多段邮件对象
message = MIMEMultipart()

# 配置邮件基础头信息
message['From'] = MY_ADDRESS
message['To'] = ", ".join(RECIPIENT_ADDRESS)
message['Subject'] = "Test Email - July"

# 构造纯文本正文
textPart = MIMEText("Hello **** & ****,\n\nAttached below is your test bill for the month of July 2022. \n\nBest,\nYour Management", 'plain')

# 构造PDF附件
filename = "Test Bill - Billy.pdf"
filePart = MIMEApplication(open(filename,"rb").read(),Name=filename)
filePart["Content-Disposition"] = 'attachment; filename="%s"' % filename

# 挂载正文和附件
message.attach(textPart)
message.attach(filePart)

# 兼容全版本Python的发信逻辑
server.sendmail(
    from_addr=MY_ADDRESS,
    to_addrs=RECIPIENT_ADDRESS,
    msg=message.as_string()
)
# 关闭SMTP连接
server.quit()

可选替代方案

如果不想修改代码,可直接将运行环境的Python版本升级到3.2及以上的稳定版,原代码的send_message()逻辑即可正常运行,但仍建议修复上述提到的正文转义、附件头格式问题,避免出现邮件显示异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 06:36:26