Pendahuluan
Bekerja dengan file Outlook MSG di C++ secara historis memerlukan otomatisasi COM yang hanya tersedia di Windows
atau perpustakaan pihak ketiga yang berat dengan lisensi restriktif. Aspose.Email FOSS untuk C++
mengubah itu: ia adalah perpustakaan C++17 murni tanpa ketergantungan eksternal, tanpa COM, dan tanpa
kode spesifik platform. Ia dibangun secara identik di Linux, macOS, dan Windows.
Perpustakaan ini dirilis di bawah lisensi MIT dan didistribusikan sebagai sumber melalui GitHub. Anda mengintegrasikannya dengan mengkloning repositori dan menambahkannya sebagai subdirektori CMake — tidak diperlukan pendaftaran manajer paket, dan tidak ada binari yang perlu dibangun sebelumnya.
Posting ini menjelaskan alur kerja inti: membaca file MSG yang ada, memeriksa propertinya, membuat pesan baru secara programatik, dan melakukan round‑tripping antara format MSG dan EML.
Fitur Utama
Baca File MSG yang Ada
Gunakan msg_reader untuk membuka file .msg dan msg_document untuk mengakses konten terstruktur‑nya.
Kedua kelas berada di namespace 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 juga memiliki overload from_stream untuk membaca dari sebuah std::istream, yang berguna dalam konteks sisi server atau pipeline di mana file tidak ada di disk.
Buat Pesan Secara Programatik
mapi_message::create menghasilkan pesan baru dalam memori dengan subjek dan isi. Anda kemudian dapat mengatur detail pengirim, menambahkan penerima, dan melampirkan payload biner atau teks sebelum menyimpan.
#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"));
Konversi MSG ke EML
mapi_message mendukung konversi langsung MSG-ke-EML melalui metode save_to_eml.
Output EML mematuhi RFC 5322 (MIME), sehingga kompatibel dengan semua klien surat standar
atau pipeline pemrosesan.
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();
Muat dari EML
Arah terbalik sama mudahnya: load_from_eml membaca file EML dan menghasilkan mapi_message di memori, yang kemudian dapat disimpan kembali ke MSG.
auto from_eml = aef::msg::mapi_message::load_from_eml(
std::filesystem::path("message.eml"));
from_eml.save(std::filesystem::path("restored.msg"));
Akses CFB Tingkat Rendah
Untuk kasus penggunaan lanjutan — seperti membaca properti MAPI mentah yang tidak diungkapkan oleh API tingkat tinggi — cfb_reader memberikan akses langsung ke kontainer Compound File Binary yang menjadi dasar format 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();
Mulai Cepat
Langkah 1 — Kloning dan Tambahkan sebagai Subdirektori
git clone https://github.com/aspose-email-foss/Aspose.Email-FOSS-for-Cpp.git
Dalam proyek Anda 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)
Langkah 2 — Sertakan dan Gunakan
#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";
}
Langkah 3 — Bangun
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build
Format yang Didukung
| Format | Ekstensi | Baca | Tulis |
|---|---|---|---|
| MSG (Outlook Message) | .msg | ✓ | ✓ |
| EML (RFC 5322 / MIME) | .eml | ✓ | ✓ |
| CFB (Compound File Binary) | .msg, .cfb | ✓ | ✓ |
Sumber Terbuka & Lisensi
Aspose.Email FOSS untuk C++ dirilis di bawah lisensi MIT. Sumber lengkap tersedia di GitHub pada aspose-email-foss/Aspose.Email-FOSS-for-Cpp. Penggunaan komersial diizinkan tanpa royalti. Perpustakaan tidak memiliki dependensi runtime selain kompiler C++17 dan CMake 3.26 atau yang lebih baru.