如何在 Python 中解析 MSG 文件

如何在 Python 中解析 MSG 文件

aspose-email-foss for Python 提供了一个纯 Python API,用于在没有 Microsoft Office 依赖的情况下读取 Outlook MSG 文件。将文件加载到 MapiMessage 对象中以访问所有消息数据。

分步指南

步骤 1:安装软件包

pip install aspose-email-foss

需要 Python 3.10 或更高版本。


步骤 2:导入 MapiMessage 类

from aspose.email_foss.msg import MapiMessage

步骤 3:加载 MSG 文件

msg = MapiMessage.from_file("message.msg")

对于对格式错误的文件进行宽松解析,请传递 strict=False

msg = MapiMessage.from_file("message.msg", strict=False)

步骤 4:访问消息属性

print(f"Subject: {msg.subject}")
print(f"Body: {msg.body}")
print(f"HTML Body: {msg.body_html[:200] if msg.body_html else 'None'}")
print(f"Message Class: {msg.message_class}")

步骤 5:列出附件

for att in msg.iter_attachments_info():
    name = att.storage_name
    is_embedded = att.is_embedded_message
    print(f"Attachment: {name}, embedded={is_embedded}")

步骤 6:检查低级 CFB 结构

from aspose.email_foss.cfb import CFBReader

reader = CFBReader.from_file("message.msg")
print(f"Directory entries: {reader.directory_entry_count}")
for entry in reader.iter_streams():
    print(f"  Stream: {entry}")
reader.close()

常见问题及解决方案

CFBError 加载时

该文件不是有效的 CFB 容器。请确认它是实际的 Outlook MSG 文件,而不是 EML。

正文为空,但 HTML 正文有内容

某些消息仅在 HTML 中存储内容。当 msg.body 返回 None 时,请检查 msg.body_html

验证警告

访问 msg.validation_issues 以查看已加载文件的合规警告元组。


常见问题解答 (FAQ)

我可以读取 EML 文件吗?

不能直接。该库处理 MSG(CFB)格式。先将 EML 内容转换为 EmailMessage 对象,然后使用 MapiMessage.from_email_message()

加载是否会将所有附件数据读取到内存中?

不。附件元数据按需读取。使用 iter_attachments_info() 进行轻量迭代。

它是线程安全的吗?

每个 MapiMessage 实例都是独立的。来自不同实例的并发读取是安全的。

 中文