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

Python实现不本地保存Word文档对象直接邮件发送的方法

问题解决思路

这个错误我之前也碰到过!本质是你调用的发送函数(不管是邮件发送、API上传还是其他场景)需要接收字符串或字节数据,但你直接传入了Document对象——它没法自动把这个对象转换成可识别的Unicode字符串,所以就抛出了这个TypeError。

核心解决方法

不用把文档保存到本地,而是把Document对象写入内存字节流(比如Python的io.BytesIO),再把字节流里的数据传给发送函数,这样既满足了“不本地保存”的要求,又能让发送函数拿到它能处理的数据。

示例代码(以python-docx为例)

1. 生成Word文档并写入内存字节流

from docx import Document
import io

# 先创建你的Word文档内容
doc = Document()
doc.add_paragraph("这是测试段落")
doc.add_heading("测试标题", level=1)

# 将文档写入内存中的字节流,完全不用存到本地
byte_stream = io.BytesIO()
doc.save(byte_stream)
# 一定要重置流的位置到开头,不然后续读取会从末尾开始,拿不到内容
byte_stream.seek(0)

2. 场景1:作为邮件附件发送

如果是用邮件发送这个文档,可以把字节流转成邮件附件:

from email.mime.base import MIMEBase
from email import encoders
import smtplib
from email.mime.multipart import MIMEMultipart

# 创建邮件主体
msg = MIMEMultipart()
msg['Subject'] = "测试Word文档"
msg['From'] = "your-email@example.com"
msg['To'] = "recipient@example.com"

# 把字节流转成邮件附件
attachment = MIMEBase('application', 'vnd.openxmlformats-officedocument.wordprocessingml.document')
attachment.set_payload(byte_stream.read())
encoders.encode_base64(attachment)
attachment.add_header('Content-Disposition', 'attachment', filename='测试文档.docx')

# 添加附件到邮件并发送
msg.attach(attachment)
with smtplib.SMTP('smtp.example.com', 587) as server:
    server.starttls()
    server.login("your-email@example.com", "your-password")
    server.send_message(msg)

3. 场景2:通过API上传文档

如果是调用第三方API上传文档,可以直接把字节流的内容传给接口:

import requests

# 读取字节流中的文档数据
doc_data = byte_stream.read()
# 发送POST请求,把文档作为文件参数上传
response = requests.post(
    "https://your-api-url.com/upload",
    files={
        'file': ('测试文档.docx', doc_data, 'application/vnd.openxmlformats-officedocument.wordprocessingml.document')
    }
)
# 检查响应
if response.status_code == 200:
    print("上传成功!")
else:
    print(f"上传失败,状态码:{response.status_code}")

关键注意点

  • 写完字节流后一定要调用seek(0),不然指针在流的末尾,后续读取会得到空数据。
  • 不同的发送场景,需要匹配对应的Content-Type(Word文档的MIME类型是application/vnd.openxmlformats-officedocument.wordprocessingml.document)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:36:35