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

Python3.9.6发送带zip附件邮件报TypeError:string payload expected错误求助

错误产生原因
  • 根容器被错误覆盖:你首先初始化了MIMEMultipart类型的msg作为承载邮件正文和附件的容器,后续执行msg = MIMEBase('application', 'octet-stream')直接将msg重写为单部分的MIMEBase对象。MIMEBase不支持挂载多个内容块,调用attach方法后会导致payload结构变为列表类型,和单部分消息要求payload为字符串,因此触发类型错误。
  • 附件构造逻辑错误:
    1. 冗余调用MIMEApplication和set_payload、encoders.encode_base64逻辑冲突,MIMEApplication本身已内置了二进制内容处理和编码逻辑,不需要手动重复设置
    2. 附件头字段拼写错误,正确字段名为Content-Disposition,代码中写的Content-Decomposition为无效字段
    3. set_payload第二个参数为文本编码,传入rb属于无效参数,二进制内容无需指定该参数
    4. 代码缺失SMTP登录步骤,即使修复类型错误后也会出现发件权限错误
修复方案

直接替换附件构造相关的错误代码即可,完整可运行的修正后代码如下:

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

smtpServer = "(Servername)"
smtpPort = (Portnumber)
smtpUsername = "(SMTP Username)" 
smtpPassword = "(Password)" 
sender = "(Username)" 
reciever = "(Username)"
subject = "(subject)"
body = "Text"
zipfilename = "你的压缩包路径.zip" # 替换为实际的zip文件路径

# 初始化根邮件容器
msg = MIMEMultipart()
msg['Subject'] = subject
msg['From'] = sender
msg['To'] = reciever

# 添加正文
text_part = MIMEText(body, 'plain')
msg.attach(text_part)

# 添加zip附件
with open(zipfilename, 'rb') as f:
    attach_part = MIMEApplication(f.read())
attach_part.add_header('Content-Disposition', 'attachment', filename=zipfilename)
msg.attach(attach_part)

# 发送邮件
smtpObj = smtplib.SMTP(smtpServer, smtpPort)
smtpObj.set_debuglevel(1)
smtpObj.starttls()
smtpObj.login(smtpUsername, smtpPassword) # 补充SMTP登录步骤
smtpObj.sendmail(sender, reciever, msg.as_string())
smtpObj.quit()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:39:01