Pengenalan
Berkerja dengan fail Outlook MSG dalam C++ secara sejarah memerlukan automasi COM yang hanya untuk Windows
atau perpustakaan pihak ketiga yang berat dengan lesen yang ketat. Aspose.Email FOSS untuk C++
mengubahnya: ia adalah perpustakaan C++17 tulen tanpa kebergantungan luaran, tanpa COM, dan tanpa
kod khusus platform. Ia dibina secara serupa pada Linux, macOS, dan Windows.
Perpustakaan ini dikeluarkan di bawah lesen MIT dan diedarkan sebagai sumber melalui GitHub. Anda mengintegrasikannya dengan mengklon repositori dan menambahkannya sebagai subdirektori CMake — tiada pendaftaran pengurus pakej diperlukan, dan tiada binari yang perlu dibina terlebih dahulu.
Pos ini membimbing aliran kerja teras: membaca fail MSG yang sedia ada, memeriksa sifat‑sifatnya, mencipta mesej baru secara programatik, dan menukar balik antara format MSG dan EML.
Ciri-ciri Utama
Baca Fail MSG Sedia Ada
Gunakan msg_reader untuk membuka fail .msg dan msg_document untuk mengakses kandungan berstrukturnya.
Kedua-dua kelas berada dalam ruang nama 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 mempunyai overload from_stream untuk membaca dari sebuah std::istream, yang berguna dalam konteks sisi pelayan atau pipeline di mana fail tidak terdapat pada cakera.
Cipta Mesej Secara Program
mapi_message::create menghasilkan mesej dalam memori baru dengan subjek dan badan. Anda kemudian boleh menetapkan butiran penghantar, menambah penerima, dan melampirkan muatan binari 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"));
Tukar MSG ke EML
mapi_message menyokong penukaran langsung MSG-ke-EML melalui kaedah save_to_eml.
Output EML mematuhi RFC 5322 (MIME), menjadikannya serasi dengan mana-mana klien mel standard
atau saluran pemprosesan.
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 juga sama mudah: load_from_eml membaca fail EML dan menghasilkan mapi_message dalam memori, yang kemudian boleh disimpan semula 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 Tahap Rendah
Untuk kes penggunaan lanjutan — seperti membaca sifat MAPI mentah yang tidak didedahkan oleh API peringkat tinggi — cfb_reader memberikan akses langsung kepada kontena Compound File Binary yang menjadi asas 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();
Mula Cepat
Langkah 1 — Klon dan Tambah sebagai Subdirektori
git clone https://github.com/aspose-email-foss/Aspose.Email-FOSS-for-Cpp.git
Dalam projek 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 — Bina
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build
Format yang Disokong
| Format | Sambungan | Baca | Tulis |
|---|---|---|---|
| MSG (Outlook Message) | .msg | ✓ | ✓ |
| EML (RFC 5322 / MIME) | .eml | ✓ | ✓ |
| CFB (Compound File Binary) | .msg, .cfb | ✓ | ✓ |
Sumber Terbuka & Pelesenan
Aspose.Email FOSS untuk C++ dikeluarkan di bawah lesen MIT. Sumber penuh tersedia di GitHub pada aspose-email-foss/Aspose.Email-FOSS-for-Cpp. Penggunaan komersial dibenarkan tanpa royalti. Perpustakaan ini tidak mempunyai kebergantungan masa jalan selain kompilator C++17 dan CMake 3.26 atau lebih baru.