مقدمه

کار با فایل‌های Outlook MSG در C++ در گذشته نیاز به خودکارسازی COM مخصوص ویندوز داشت
یا کتابخانه‌های سنگین شخص ثالث با مجوزهای محدود. Aspose.Email FOSS برای C++
این وضعیت را تغییر می‌دهد: این یک کتابخانه خالص C++17 است که هیچ وابستگی خارجی، هیچ COM، و هیچ
کد مخصوص پلتفرم ندارد. این کتابخانه به‌صورت یکسان بر روی Linux، macOS و Windows ساخته می‌شود.

کتابخانه تحت مجوز MIT منتشر شده و به‌صورت منبع از طریق GitHub توزیع می‌شود. شما آن را با کلون کردن مخزن و افزودن به‌عنوان یک زیرپوشه CMake یکپارچه می‌کنید — نیازی به ثبت در مدیر بسته نیست و نیازی به پیش‌ساخت باینری‌ها نیست.

این پست جریان کاری اصلی را مرور می‌کند: خواندن یک فایل MSG موجود، بررسی ویژگی‌های آن، ایجاد یک پیام جدید به‌صورت برنامه‌نویسی، و تبدیل دورانی بین فرمت‌های MSG و EML.


ویژگی‌های کلیدی

خواندن فایل‌های MSG موجود

از msg_reader برای باز کردن یک فایل .msg و از msg_document برای دسترسی به محتوای ساختاری آن استفاده کنید. هر دو کلاس در فضای نام 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 همچنین یک overload from_stream برای خواندن از یک std::istream دارد، که در زمینه‌های سمت‑سرور یا خط لوله مفید است که در آن فایل‌ها بر روی دیسک موجود نیستند.

ایجاد پیام‌ها به‌صورت برنامه‌نویسی

mapi_message::create یک پیام جدید در حافظه با موضوع و متن تولید می‌کند.
سپس می‌توانید جزئیات فرستنده را تنظیم کنید، دریافت‌کنندگان را اضافه کنید و قبل از ذخیره‌سازی، داده‌های باینری یا متنی را پیوست کنید.

#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"));

تبدیل MSG به EML

mapi_message تبدیل مستقیم MSG به EML را از طریق روش save_to_eml پشتیبانی می‌کند.
خروجی EML با RFC 5322 (MIME) سازگار است، که آن را با هر کلاینت ایمیل
استاندارد یا خط لوله پردازشی سازگار می‌کند.

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();

بارگذاری از EML

جهت معکوس نیز به همان اندازه ساده است: load_from_eml یک فایل EML را می‌خواند و یک mapi_message در حافظه تولید می‌کند که سپس می‌تواند به MSG ذخیره شود.

auto from_eml = aef::msg::mapi_message::load_from_eml(
    std::filesystem::path("message.eml"));

from_eml.save(std::filesystem::path("restored.msg"));

دسترسی سطح پایین CFB

برای موارد پیشرفته — مانند خواندن ویژگی‌های خام MAPI که توسط API سطح بالا در دسترس نیستند — cfb_reader دسترسی مستقیم به مخزن Compound File Binary که پایهٔ فرمت 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();

شروع سریع

مرحله 1 — کلون و افزودن به‌عنوان زیرپوشه

git clone https://github.com/aspose-email-foss/Aspose.Email-FOSS-for-Cpp.git

در پروژه شما 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)

مرحله ۲ — گنجاندن و استفاده

#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";
}

مرحله ۳ — ساخت

cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build

قالب‌های پشتیبانی‌شده

قالبپسوندخواندننوشتن
MSG (Outlook Message).msg
EML (RFC 5322 / MIME).eml
CFB (Compound File Binary).msg, .cfb

منبع باز و مجوزدهی

Aspose.Email FOSS برای C++ تحت مجوز MIT منتشر شده است. کد منبع کامل در گیت‌هاب در aspose-email-foss/Aspose.Email-FOSS-for-Cpp موجود است.
استفاده تجاری بدون حق امتیاز مجاز است.
این کتابخانه هیچ وابستگی زمان اجرا‌ای جز یک کامپایلر C++17 و CMake 3.26 یا بالاتر ندارد.


شروع کار