Inleiding

Werken met Outlook MSG‑bestanden in C++ heeft historisch gezien Windows‑only COM‑automatisering vereist
of zware third‑party bibliotheken met restrictieve licenties. Aspose.Email FOSS voor C++
verandert dat: het is een pure C++17‑bibliotheek zonder externe afhankelijkheden, geen COM, en geen
platform‑specifieke code. Het bouwt identiek op Linux, macOS en Windows.

De bibliotheek wordt uitgebracht onder de MIT‑licentie en gedistribueerd als bron via GitHub. Je integreert deze door de repository te clonen en toe te voegen als een CMake‑subdirectory — er is geen registratie bij een package‑manager vereist, en er hoeven geen binaries vooraf te worden gebouwd.

Deze post loopt het kernwerkproces door: het lezen van een bestaand MSG‑bestand, het inspecteren van de eigenschappen, het programmatisch maken van een nieuw bericht, en het round‑tripping tussen MSG‑ en EML‑formaten.


Belangrijkste kenmerken

Bestaande MSG-bestanden lezen

Gebruik msg_reader om een .msg‑bestand te openen en msg_document om toegang te krijgen tot de gestructureerde inhoud.
Beide klassen bevinden zich in de aspose::email::foss::msg‑namespace.

#include "aspose/email/foss/msg/msg_reader.hpp"
#include "aspose/email/foss/msg/msg_document.hpp"
#include <filesystem>

namespace aef = aspose::email::foss;

auto reader   = aef::msg::msg_reader::from_file(std::filesystem::path("message.msg"));
auto document = aef::msg::msg_document::from_reader(reader);

msg_reader heeft ook een from_stream overload voor het lezen vanuit een std::istream, wat handig is in server‑side of pipeline‑contexten waarin bestanden niet op schijf aanwezig zijn.

Maak berichten via code

mapi_message::create maakt een nieuw in‑memory‑bericht met een onderwerp en tekst. Je
kunt vervolgens de afzendergegevens instellen, ontvangers toevoegen, en binaire of tekst‑payloads bijvoegen voordat
je opslaat.

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

namespace aef = aspose::email::foss;

auto msg = aef::msg::mapi_message::create(
    "Quarterly status update",
    "Hello team,\n\nPlease find the rollout summary attached.\n\nRegards");

msg.set_sender_name("Build Agent");
msg.set_sender_email_address("build.agent@example.com");
msg.add_recipient("alice@example.com", "Alice Example");
msg.save(std::filesystem::path("output.msg"));

Converteer MSG naar EML

mapi_message ondersteunt directe MSG-naar-EML-conversie via de save_to_eml-methode. EML-uitvoer voldoet aan RFC 5322 (MIME), waardoor het compatibel is met elke standaard e‑mail client of verwerkingspipeline.

auto loaded = aef::msg::mapi_message::from_file(
    std::filesystem::path("message.msg"), /*strict=*/false);

// Save as EML to a file
loaded.save_to_eml(std::filesystem::path("message.eml"));

// Or capture as bytes
std::vector<std::uint8_t> eml_bytes = loaded.save_to_eml();

Laden vanuit EML

De omgekeerde richting is even eenvoudig: load_from_eml leest een EML‑bestand en produceert een mapi_message in het geheugen, die vervolgens kan worden opgeslagen als MSG.

auto from_eml = aef::msg::mapi_message::load_from_eml(
    std::filesystem::path("message.eml"));

from_eml.save(std::filesystem::path("restored.msg"));

Low-Level CFB-toegang

Voor geavanceerde use cases — zoals het lezen van ruwe MAPI‑eigenschappen die niet worden blootgesteld door de high‑level API — geeft cfb_reader directe toegang tot de Compound File Binary‑container die ten grondslag ligt aan het MSG‑formaat.

#include "aspose/email/foss/cfb/cfb_reader.hpp"

namespace aef = aspose::email::foss;

auto cfb = aef::cfb::cfb_reader::from_file(std::filesystem::path("message.msg"));
auto storage_ids = cfb.storage_ids();
auto stream_ids  = cfb.stream_ids();

Snelstart

Stap 1 — Kloon en voeg toe als subdirectory

git clone https://github.com/aspose-email-foss/Aspose.Email-FOSS-for-Cpp.git

In uw project CMakeLists.txt:

cmake_minimum_required(VERSION 3.26)
project(my_project)

add_subdirectory(Aspose.Email-FOSS-for-Cpp)

add_executable(my_app main.cpp)
target_link_libraries(my_app PRIVATE AsposeEmailFoss::AsposeEmailFoss)

Stap 2 — Insluiten en gebruiken

#include <iostream>
#include "aspose/email/foss/msg/mapi_message.hpp"

namespace aef = aspose::email::foss;

int main()
{
    // Create a message
    auto msg = aef::msg::mapi_message::create("Hello from C++", "Body text here");
    msg.save(std::filesystem::path("hello.msg"));

    // Round-trip to EML
    auto loaded = aef::msg::mapi_message::from_file(
        std::filesystem::path("hello.msg"), false);
    loaded.save_to_eml(std::filesystem::path("hello.eml"));

    std::cout << "Done\n";
}

Stap 3 — Bouwen

cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build

Ondersteunde formaten

FormaatExtensieLezenSchrijven
MSG (Outlook-bericht).msg
EML (RFC 5322 / MIME).eml
CFB (Compound File Binary).msg, .cfb

Open source & licenties

Aspose.Email FOSS voor C++ is uitgebracht onder de MIT-licentie.
De volledige broncode is beschikbaar
op GitHub op aspose-email-foss/Aspose.Email-FOSS-for-Cpp.
Commercieel gebruik is toegestaan zonder royalty’s.
De bibliotheek heeft geen runtime-afhankelijkheden
buiten een C++17-compiler en CMake 3.26 of later.


Aan de slag