1. Products
  2.   Aspose.Email
  3.   Aspose.Email FOSS pentru C++ for C++

Aspose.Email FOSS pentru C++

Citește, creează și procesează fișiere Outlook MSG și containere CFB din C++ — gratuit și open-source, fără dependență de Microsoft Outlook.

Bibliotecă C++ open‑source pentru fișiere MSG și CFB

Aspose.Email FOSS pentru C++ este o bibliotecă C++ open‑source, licențiată sub MIT, pentru lucrul cu fișierele Microsoft Outlook .msg și containerele Compound File Binary (CFB). Include anteturile prin CMake și începe imediat să citești, să creezi și să procesezi mesaje de e‑mail fără a instala Microsoft Outlook sau orice runtime proprietar.

Biblioteca oferă două niveluri de acces. La nivelul inferior, cfb_reader și cfb_writer oferă control complet asupra containerelor binare CFB — parcurgerea intrărilor de director, citirea și scrierea nodurilor de stocare și a datelor de flux, și inspectarea aranjamentului brut al sectoarelor. msg_reader și msg_writer gestionează formatul MSG deasupra CFB, expunând fluxurile de proprietăți MAPI, tabelele de destinatari și sub‑stocările de atașamente. La nivelul superior, mapi_message îți permite să creezi mesaje noi de la zero, să citești subiecte, corpuri, destinatari și atașamente și să convertești între formatul MSG și EML.

Biblioteca se compilează pe orice platformă cu un compilator C++17 și nu are dependențe externe, făcând‑o potrivită pentru Windows, Linux, macOS, containere Docker și sisteme încorporate.

CFB Container Read and Write

  • Open CFB files: Load existing CFB containers from a file path, stream, or byte array via cfb_reader::from_file(), cfb_reader::from_stream(), or cfb_reader::from_bytes().
  • Traverse the directory tree: Enumerate storages and streams using storage_ids(), stream_ids(), and child_ids(), and navigate nested hierarchies with resolve_path().
  • Inspect nodes: Check node type with cfb_node::is_storage() and cfb_node::is_stream(), read timestamps via creation_time() and modified_time().
  • Write CFB containers: Build CFB documents programmatically with cfb_document and serialize to bytes or file via cfb_writer::to_bytes() or cfb_writer::write_file().

Where CFB Access Is Used

  • MSG file inspection: CFB is the container format for Outlook .msg files — direct CFB access enables forensic inspection and repair.
  • Custom binary formats: Any legacy application using CFB for data storage can be read or written without a COM dependency.
  • Data recovery: Traverse the full directory tree and extract raw stream bytes from damaged or non-standard CFB files.

MSG File Read and Write

  • Read MSG files: Open Outlook MSG files with msg_reader::from_file() or msg_reader::from_stream() and access the underlying MAPI property streams and attachment sub-storages.
  • Write MSG files: Produce MSG files from a msg_document with msg_writer::to_bytes() or msg_writer::write_file().
  • MSG document inspection: Access version metadata via msg_document::major_version(), msg_document::minor_version(), and check strictness with msg_document::strict().
  • Convert to CFB: Extract the underlying CFB document from an MSG file via msg_document::to_cfb_document().

Where MSG Processing Is Used

  • Email archival pipelines: Bulk-read .msg files from archive directories and extract metadata or attachments.
  • Migration tools: Convert MSG collections to standard formats for import into non-Outlook systems.
  • Legal discovery: Parse raw MAPI property streams to extract all message fields including non-standard properties.

High-Level MAPI Message API

  • Create messages: Build a complete email with mapi_message::create(), then set subject, body, and HTML body via set_subject(), set_body(), and set_html_body().
  • Set sender details: Configure set_sender_name(), set_sender_email_address(), and set_sender_address_type() for the outgoing message.
  • Manage attachments: Load attachments from bytes or streams with mapi_attachment::from_bytes() and mapi_attachment::from_stream(), and check for embedded messages via is_embedded_message().
  • Save and reload: Serialize with mapi_message::save() and reload with mapi_message::from_file() or mapi_message::from_stream().

Where the High-Level API Is Used

  • Automated email generation: Generate thousands of personalized MSG files from data records in batch jobs.
  • Test fixture creation: Build known-good MSG files with predictable content for integration test suites.
  • Attachment extraction: Load an MSG file, iterate attachments, and save each to disk.

EML and MIME Conversion

  • Load EML into mapi_message: Parse a standard .eml file (RFC 5322 / MIME) into a full mapi_message object via mapi_message::load_from_eml().
  • Save mapi_message as EML: Serialize a mapi_message back to MIME format with save_to_eml().
  • Round-trip fidelity: Subject, body, sender, recipients, and attachments are preserved through EML to MSG to EML round-trips.

Where EML Conversion Is Used

  • Format bridging: Receive emails as EML from mail servers and convert to MSG for Outlook-compatible storage.
  • Standards compliance: Convert proprietary MSG files to standard MIME for delivery to any mail transport.
  • Archival normalization: Normalize a mixed archive of .eml and .msg files to a single format.

Read Subject from an MSG File

Open an Outlook MSG file from a stream and print the subject — no Microsoft Outlook required.

#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';
}

Create and Save an MSG Message

Build a complete email with sender, recipient, and attachment, then write it to both MSG and EML formats.

#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);
}
 Română