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

FormatSambunganBacaTulis
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.


Mula