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
相关产品推荐
相关产品推荐

