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

Python使用MIMEMultipart发送邮件无法正确附加PDF文件求助

Python构造邮件附加PDF文件的解决方案

错误根因

  • 第一个报错的核心问题是MIMEText仅用于处理文本类内容,初始化时会自动对输入内容执行编码操作,你用rb模式读取PDF得到的是二进制bytes对象,不存在encode方法,因此触发属性错误。
  • 第二个PDF损坏的原因是PDF属于二进制格式文件,用文本模式r读取时会强制按文本编码规则解码二进制数据,errors='ignore'会直接丢弃所有无法解码的字节,最终写入附件的内容和原文件完全不符,无法正常打开。

正确实现方案

处理二进制附件请使用MIMEApplication类,不要用MIMEText,完整实现代码如下:

# 导入依赖
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication

# 初始化邮件对象
msg = MIMEMultipart()
# 此处可自行添加邮件主题、发件人、收件人、正文等常规配置

# 处理PDF附件
with open("out.pdf", "rb") as f:
    pdf_attachment = MIMEApplication(f.read(), _subtype="pdf")
# 设置附件属性,filename为收件人端显示的文件名
pdf_attachment.add_header("Content-Disposition", "attachment", filename="out.pdf")
# 将附件添加到邮件中
msg.attach(pdf_attachment)

如果你使用的是Python 3.3之前的旧版本,可使用MIMEBase兼容实现:

from email.mime.base import MIMEBase
from email import encoders

msg = MIMEMultipart()
# 常规邮件配置略

with open("out.pdf", "rb") as f:
    pdf_attachment = MIMEBase("application", "pdf")
    pdf_attachment.set_payload(f.read())
# 对二进制内容做base64编码适配邮件传输
encoders.encode_base64(pdf_attachment)
pdf_attachment.add_header("Content-Disposition", "attachment", filename="out.pdf")
msg.attach(pdf_attachment)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 14:15:01