介绍
Aspose.Email FOSS for Python 是一个免费、采用 MIT 许可证的库,用于在纯 Python 中创建、读取和转换兼容 Outlook 的消息文件。它在 PyPI 上以 aspose-email-foss 的形式提供,可在 Windows、macOS、Linux、Docker 以及无服务器环境中运行,无需 Microsoft Office 依赖,也不需要专有运行时。
该库涵盖两个主要领域:用于处理消息主题、正文、收件人和附件的高级 MAPI 层 (MapiMessage);以及低级结构层 (MsgReader, CFBReader, CFBStorage, CFBStream),它公开了支撑每个 .msg 文件的原始复合文件二进制容器。
本文将逐步介绍在 26.3 版本中发布的关键特性,以已确认的 API 表面为基础。
关键特性
使用 MapiMessage 的高级消息创建
MapiMessage 是从头创建兼容 Outlook 的消息的主要入口点。使用主题和正文调用 MapiMessage.create(),添加收件人和附件,然后直接保存为 .msg 文件。
from aspose.email_foss import msg
message = msg.MapiMessage.create(
"Quarterly status update",
"Hello team,\n\nPlease review the attached summary.\n\nRegards,\nEngineering",
)
message.set_property(msg.PropertyId.SENDER_NAME, "Build Agent")
message.set_property(msg.PropertyId.SENDER_EMAIL_ADDRESS, "agent@example.com")
message.add_recipient("alice@example.com", display_name="Alice Example")
message.add_recipient(
"carol@example.com",
display_name="Carol Example",
recipient_type=msg.RECIPIENT_TYPE_CC,
)
message.add_attachment("report.txt", b"Summary content here.\n", mime_type="text/plain")
message.save("output.msg")
读取和检查 MSG 文件
MsgReader 提供对现有 .msg 文件的结构化访问,而无需将其完全加载到 MapiMessage 中。它单独公开顶层属性条目、收件人存储和附件存储,使其在大文件检查和验证流水线中实用。
from aspose.email_foss import msg
with msg.MsgReader.from_file("output.msg") as reader:
header = reader.top_level_header
print(f"Recipients : {header.recipient_count}")
print(f"Attachments: {header.attachment_count}")
for entry in reader.iter_recipient_storages():
_, props = reader.parse_subobject_property_stream(entry.stream_id)
print(f" Recipient storage {entry.name}: {len(props)} property entries")
MSG 循环往返:加载、修改、保存
由于 MapiMessage 支持 from_file() 用于加载,且支持 save() 用于写入,完整的读-改-写循环只需几行代码。通过 set_property、PropertyId 和 MapiNamedProperty 可使用命名属性、类型化枚举和 Unicode 字符串处理。
from aspose.email_foss import msg
with msg.MapiMessage.from_file("original.msg") as message:
message.set_property(msg.PropertyId.SUBJECT, "Updated Subject")
message.save("updated.msg")
EML / RFC 5322 转换
MapiMessage.to_email_message() 将已加载的 MSG 转换为标准的 Python email.message.EmailMessage 对象,使用标准库即可导出为 RFC 5322 .eml 格式。相反方向(MapiMessage.from_email_message())则从 EmailMessage 构建一个 MapiMessage。
from pathlib import Path
from aspose.email_foss import msg
with msg.MapiMessage.from_file("message.msg") as message:
eml_bytes = message.to_email_bytes()
Path("message.eml").write_bytes(eml_bytes)
# Reverse: load EML into MapiMessage
import email
raw_eml = Path("message.eml").read_bytes()
email_obj = email.message_from_bytes(raw_eml)
mapi = msg.MapiMessage.from_email_message(email_obj)
mapi.save("from_eml.msg")
CFB 容器遍历
每个 .msg 文件都是一个复合文件二进制(CFB)容器。CFBReader 提供对目录树的只读访问,允许您列出存储和流、遍历层次结构,并提取原始流字节——无需依赖 MsgReader。
from aspose.email_foss.cfb import CFBReader
with CFBReader.from_file("message.msg") as reader:
print(f"CFB version : {reader.major_version}")
print(f"Sector size : {reader.sector_size}")
for depth, entry in reader.iter_tree():
indent = " " * depth
size = entry.stream_size if entry.is_stream() else "-"
print(f"{indent}{entry.name} [size={size}]")
附件处理
附件可通过 MapiMessage.add_attachment()(用于二进制数据)或 MapiMessage.add_embedded_message_attachment()(用于嵌套的 MSG 消息)添加。两种方法均接受文件名、原始字节以及可选的 MIME 类型。
from aspose.email_foss import msg
message = msg.MapiMessage.create("Attachment demo", "See files below.")
message.add_attachment("data.csv", b"id,value\n1,100\n", mime_type="text/csv")
inner = msg.MapiMessage.create("Nested message", "This is embedded.")
message.add_embedded_message_attachment(inner, "nested.msg")
message.save("with_attachments.msg")
快速入门
pip install aspose-email-fossfrom aspose.email_foss import msg
# Create and save a minimal MSG
message = msg.MapiMessage.create("Hello World", "This is a test message.")
message.set_property(msg.PropertyId.SENDER_EMAIL_ADDRESS, "sender@example.com")
message.add_recipient("recipient@example.com", display_name="Recipient")
message.save("hello.msg")
# Load it back and convert to EML
with msg.MapiMessage.from_file("hello.msg") as loaded:
print(loaded.get_property_value(msg.PropertyId.SUBJECT))
eml = loaded.to_email_bytes()
open("hello.eml", "wb").write(eml)
支持的格式
| 格式 | 扩展名 | 读取 | 写入 |
|---|---|---|---|
| 复合文件二进制 | .cfb | ✓ | ✓ |
| Outlook 消息 | .msg | ✓ | ✓ |
| EML / RFC 5322 | .eml | ✓ | ✓ |
开源与许可
Aspose.Email FOSS for Python 在 MIT 许可证下发布。源码仓库可在 github.com/aspose-email-foss 获取,软件包已在 PyPI 上以 aspose-email-foss 的形式发布。根据 MIT 条款,允许商业使用、修改和再分发。