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
| Formaat | Extensie | Lezen | Schrijven |
|---|---|---|---|
| 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.