Introducere
Lucrul cu fișiere Outlook MSG în C++ a necesitat istoric automatizare COM doar pe Windows
sau biblioteci terțe grele cu licențe restrictive. Aspose.Email FOSS pentru C++
schimbă asta: este o bibliotecă pură C++17 fără dependențe externe, fără COM și fără
cod specific platformei. Se compilează identic pe Linux, macOS și Windows.
Biblioteca este lansată sub licența MIT și distribuită ca sursă prin GitHub. Tu o integrezi prin clonarea depozitului și adăugarea lui ca subdirector CMake — nu este necesară înregistrarea la managerul de pachete, și nu este nevoie să se pre-construiască binarele.
Acest articol parcurge fluxul de lucru de bază: citirea unui fișier MSG existent, inspectarea proprietăților sale, crearea unui mesaj nou programatic și conversia bidirecțională între formatele MSG și EML.
Caracteristici principale
Citește fișiere MSG existente
Utilizați msg_reader pentru a deschide un fișier .msg și msg_document pentru a accesa conținutul său structurat.
Ambele clase se află în spațiul de nume aspose::email::foss::msg.
#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 are, de asemenea, o suprasarcină from_stream pentru citirea dintr-un std::istream, care este utilă în contexte server-side sau de pipeline în care fișierele nu sunt prezente pe disc.
Creează Mesaje Programatic
mapi_message::create creează un nou mesaj în memorie cu un subiect și un corp. Apoi puteți seta detaliile expeditorului, adăuga destinatari și atașa încărcături binare sau textuale înainte de a salva.
#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"));
Convertiți MSG în EML
mapi_message suportă conversia directă MSG‑în‑EML prin metoda save_to_eml.
Ieșirea EML respectă RFC 5322 (MIME), făcând-o compatibilă cu orice client de mail standard
sau cu orice lanț de procesare.
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();
Încărcare din EML
Direcția inversă este la fel de simplă: load_from_eml citește un fișier EML și produce un mapi_message în memorie, care poate fi apoi salvat înapoi în MSG.
auto from_eml = aef::msg::mapi_message::load_from_eml(
std::filesystem::path("message.eml"));
from_eml.save(std::filesystem::path("restored.msg"));
Acces la nivel scăzut CFB
Pentru cazuri de utilizare avansate — cum ar fi citirea proprietăților MAPI brute care nu sunt expuse de API-ul de nivel înalt — cfb_reader oferă acces direct la containerul Compound File Binary care stă la baza formatului MSG.
#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();
Pornire rapidă
Pasul 1 — Clonează și adaugă ca subdirector
git clone https://github.com/aspose-email-foss/Aspose.Email-FOSS-for-Cpp.git
În proiectul tău 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)
Pasul 2 — Include și Folosește
#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";
}
Pasul 3 — Construire
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build
Formate acceptate
| Format | Extensie | Citire | Scriere |
|---|---|---|---|
| MSG (Outlook Message) | .msg | ✓ | ✓ |
| EML (RFC 5322 / MIME) | .eml | ✓ | ✓ |
| CFB (Compound File Binary) | .msg, .cfb | ✓ | ✓ |
Open Source și Licențiere
Aspose.Email FOSS pentru C++ este lansat sub licența MIT. Codul sursă complet este disponibil
pe GitHub la aspose-email-foss/Aspose.Email-FOSS-for-Cpp.
Utilizarea comercială este permisă fără redevențe. Biblioteca nu are dependențe la runtime
în afara unui compilator C++17 și CMake 3.26 sau ulterior.