1. 产品
  2.   Aspose.Email
  3.   Aspose.Email FOSS for C++

Aspose.Email FOSS - Aspose.Email C++ 的 FOSS

在 C++ 中读取、创建和处理 Outlook MSG 文件及 CFB 容器 — 免费开源,无需 Microsoft Outlook 依赖。

开源 C++ 库,用于 MSG 与 CFB 文件

Aspose.Email FOSS for C++ 是一个 MIT-licensed、开源的 C++ 库,用于处理 Microsoft Outlook .msg 文件和 Compound File Binary (CFB) 容器。通过 CMake 包含头文件,即可立即开始读取、创建和处理电子邮件,而无需安装 Microsoft Outlook 或任何专有运行时。

该库提供两个访问层级。低层级中,cfb_readercfb_writer 提供对 CFB 二进制容器的完整控制——遍历目录条目,读取和写入存储节点及流数据,并检查原始扇区布局。msg_readermsg_writer 在 CFB 之上处理 MSG 格式,公开 MAPI 属性流、收件人表和附件子存储。高层级中,mapi_message 允许您从头创建新消息,读取主题、正文、收件人和附件,并在 MSG 与 EML 格式之间进行转换。 该库可在任何配备 C++17 编译器的平台上构建,且没有外部依赖,使其适用于 Windows、Linux、macOS、Docker 容器和嵌入式系统。 提供了包含附加功能的企业版,标记为 Aspose.Email for C++

CFB 容器读取与写入

  • 打开 CFB 文件: 通过 cfb_reader::from_file()cfb_reader::from_stream()cfb_reader::from_bytes() 从文件路径、流或字节数组加载现有 CFB 容器。
  • 遍历目录树: 使用 storage_ids()stream_ids()child_ids() 枚举存储和流,并使用 resolve_path() 导航嵌套层次结构。
  • 检查节点: 使用 cfb_node::is_storage()cfb_node::is_stream() 检查节点类型,通过 creation_time()modified_time() 读取时间戳。
  • 写入 CFB 容器: 使用 cfb_document 以编程方式构建 CFB 文档,并通过 cfb_writer::to_bytes()cfb_writer::write_file() 将其序列化为字节或文件。

CFB 访问的使用场景

  • MSG 文件检查: CFB 是 Outlook .msg 文件的容器格式 — 直接访问 CFB 可实现取证检查和修复。
  • Custom binary formats: 任何使用 CFB 进行数据存储的旧版应用程序都可以在没有 COM 依赖的情况下读取或写入。
  • 数据恢复: 遍历完整的目录树,并从损坏或非标准的 CFB 文件中提取原始流字节。

MSG 文件读取与写入

  • 读取 MSG 文件: 使用 msg_reader::from_file()msg_reader::from_stream() 打开 Outlook MSG 文件,并访问底层的 MAPI 属性流和附件子存储。
  • 写 MSG 文件: 使用 msg_writer::to_bytes()msg_writer::write_file()msg_document 生成 MSG 文件。
  • MSG 文档检查: 通过 msg_document::major_version()msg_document::minor_version() 访问版本元数据,并使用 msg_document::strict() 检查严格性。
  • Convert to CFB: 从 MSG 文件中通过 msg_document::to_cfb_document() 提取底层 CFB 文档。

MSG 处理的使用位置

  • Email archival pipelines: 批量读取 .msg 文件从归档目录并提取元数据或附件。
  • 迁移工具: 将 MSG 集合转换为标准格式,以便导入非 Outlook 系统。
  • Legal discovery: 解析原始 MAPI 属性流,以提取所有消息字段,包括非标准属性。

高级 MAPI 消息 API

  • 创建消息: 使用 mapi_message::create() 构建完整的电子邮件,然后通过 set_subject()set_body()set_html_body() 设置主题、正文和 HTML 正文。
  • 设置发件人详细信息: 为外发消息配置 set_sender_name()set_sender_email_address()set_sender_address_type()
  • 管理附件: 使用 mapi_attachment::from_bytes()mapi_attachment::from_stream() 从字节或流加载附件,并通过 is_embedded_message() 检查嵌入的消息。
  • 保存并重新加载: 使用 mapi_message::save() 序列化,使用 mapi_message::from_file()mapi_message::from_stream() 重新加载。

高级 API 的使用位置

  • 自动化电子邮件生成: 从批处理作业中的数据记录生成数千个个性化的 MSG 文件。
  • Test fixture creation: 构建已知良好的 MSG 文件,内容可预测,以用于集成测试套件。
  • 附件提取: 加载 MSG 文件,遍历附件,并将每个保存到磁盘。

EML 与 MIME 转换

  • Load EML into mapi_message: 将标准 .eml 文件(RFC 5322 / MIME)解析为完整的 mapi_message 对象,通过 mapi_message::load_from_eml()
  • Save mapi_message as EML:mapi_message 序列化回 MIME 格式,使用 save_to_eml()
  • 往返保真度: 主题、正文、发件人、收件人以及附件在 EML 到 MSG 再到 EML 的往返过程中均得以保留。

EML 转换的使用位置

  • 格式桥接: 从邮件服务器接收 EML 并转换为 MSG,以实现 Outlook 兼容的存储。
  • 标准合规性: 将专有 MSG 文件转换为标准 MIME,以便交付到任何邮件传输。
  • 归档规范化: 将包含 .eml.msg 文件的混合归档规范化为单一格式。

从 MSG 文件读取主题

从流中打开 Outlook MSG 文件并打印主题 — 无需 Microsoft Outlook。

#include <fstream>
#include <iostream>

#include "aspose/email/foss/msg/mapi_message.hpp"

int main()
{
    std::ifstream input("sample.msg", std::ios::binary);
    auto message = aspose::email::foss::msg::mapi_message::from_stream(input);
    std::cout << message.subject() << '\n';
}

创建并保存 MSG 消息

构建一个包含发件人、收件人和附件的完整电子邮件,然后将其写入 MSG 和 EML 格式。

#include <fstream>

#include "aspose/email/foss/msg/mapi_message.hpp"

int main()
{
    auto message = aspose::email::foss::msg::mapi_message::create("Hello", "Body");
    message.set_sender_name("Alice");
    message.set_sender_email_address("alice@example.com");
    message.add_recipient("bob@example.com", "Bob");
    message.add_attachment("note.txt", std::vector<std::uint8_t>{'a', 'b', 'c'}, "text/plain");

    std::ofstream msg_output("hello.msg", std::ios::binary);
    message.save(msg_output);

    std::ofstream eml_output("hello.eml", std::ios::binary);
    message.save_to_eml(eml_output);
}
  

支持和学习资源

 中文