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

Linux环境下使用Python读取.msg文件提取附件的问题排查

为什么Python的email模块无法读取.msg文件的附件?

你踩的这个坑其实很常见——Outlook的.msg文件并不是标准的MIME格式邮件,而Python内置的email模块是专门用来解析符合RFC标准的邮件(比如常见的.eml格式)的,完全不认识Outlook特有的文件结构,所以才会出现只输出纯文本内容、找不到附件的情况。

具体原因拆解:

当你用email.message_from_binary_file()读取.msg文件时,这个模块只能识别文件里最表层的纯文本片段(也就是你看到的text/plain输出),但.msg文件的附件是存储在OLE(对象链接与嵌入)复合文档结构里的,这种结构是Outlook自己定义的,email模块根本没有处理它的逻辑,所以遍历msg.walk()时自然找不到任何附件相关的部分。

为什么extract_msg能解决问题?

extract_msg库是专门为解析Outlook .msg文件开发的,它能直接解析.msg文件的复合文档结构,提取出邮件的收件人、正文、附件等所有内容,所以你用它的msg.attachments属性就能轻松遍历并保存附件。

代码对比

无法读取附件的错误写法(依赖email模块):

import email
with open('input/message.msg', 'rb') as fp:
    msg = email.message_from_binary_file(fp)
for part in msg.walk():
    print(part.get_content_type())
    print(part.get_filename())
    print(part.get_content_maintype())

正确的解析方式(使用extract_msg):

import extract_msg
msg = extract_msg.Message("input/email.msg")
for attachment in msg.attachments:
    print(attachment.save())  # 保存附件并输出保存路径

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:48:06