مقدمه
کار با فایلهای 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 یا بالاتر ندارد.