كيفية البدء مع Aspose.Email FOSS لـ C++
Aspose.Email FOSS for C++ is a library for reading and writing Outlook MSG files, EML messages, and CFB containers. It has no third-party dependencies and requires only a C++17 compiler and CMake.
الخطوة 1 - إدراج وإضافة إلى مشروع CMake الخاص بك
git clone https://github.com/aspose-email-foss/Aspose.Email-FOSS-for-Cpp.gitإضافة المكتبة كمدير فرعي وربطها في الخاص بك CMakeLists.txt:
add_subdirectory(Aspose.Email-FOSS-for-Cpp)
target_link_libraries(your_target PRIVATE AsposeEmailFoss::AsposeEmailFoss)يستخدم المكتبة مجرد مكتبت C++ القياسية وليس لديها أي إدمانات من طرف ثالث.GCC 9+، Clang 10+ و MSVC 2019+ يتم الإبلاغ عنها كما مدعومة في مشروع README.
الخطوة 2 - اقرأ ملف MSG
إدراجها في mapi_message إرسال رسالة خاصة وفتح ملف مع mapi_message::from_stream():
#include <fstream>
#include <iostream>
#include "aspose/email/foss/msg/mapi_message.hpp"
int main()
{
std::ifstream input("sample.msg", std::ios::binary);
auto message = aspose::email::foss::msg::mapi_message::from_stream(input);
std::cout << "Subject: " << message.subject() << '\n';
std::cout << "From: " << message.sender_email_address() << '\n';
std::cout << "Body: " << message.body() << '\n';
for (const auto& recipient : message.recipients())
std::cout << "To: " << recipient.email_address << '\n';
for (const auto& attachment : message.attachments())
std::cout << "Attachment: " << attachment.filename
<< " (" << attachment.mime_type << ")\n";
}mapi_message::from_stream() يقطع حاوية CFB في ملف MSG ويعرض جميع MAPIs خصائص من خلال أساليب المرفقات المكتوبة.لا يتطلب تثبيت Microsoft Outlook.
الخطوة 3 - إنشاء ملف MSG الجديد
استخدام mapi_message::create() لإنشاء رسالة في الذاكرة ، إعداد المرسل والمستلم ألواح، وتخزين إلى القرص مع save():
#include <fstream>
#include "aspose/email/foss/msg/mapi_message.hpp"
int main()
{
auto message = aspose::email::foss::msg::mapi_message::create(
"Meeting Notes", "Please find the agenda attached.");
message.set_sender_name("Alice");
message.set_sender_email_address("alice@example.com");
message.add_recipient("bob@example.com", "Bob");
message.add_attachment(
"agenda.txt",
std::vector<std::uint8_t>{'I', 't', 'e', 'm', ' ', '1'},
"text/plain");
std::ofstream output("meeting_notes.msg", std::ios::binary);
message.save(output);
}mapi_message::create() إنتاج رسالة في ذاكرة. save() يُقبل مسار الملف، و std::ostream,لا توجد أسباب (العودة إلى std::vector<std::uint8_t>).
الخطوة 4 - تحويل EML إلى MSG (والعودة)
تحميل ملف EML مع mapi_message::load_from_eml(),ثم قم بتسجيل الدخول إلى MSG مع save().الحفاظ على موضوع، جسم النص المسطح، وخصائص الجسم HTML،, المراسلين والمستلمين والملفات:
#include <filesystem>
#include <iostream>
#include "aspose/email/foss/msg/mapi_message.hpp"
int main()
{
// EML → MSG
auto message = aspose::email::foss::msg::mapi_message::load_from_eml(
std::filesystem::path("message.eml"));
std::cout << "Subject: " << message.subject() << '\n';
message.save(std::filesystem::path("converted.msg"));
// MSG → EML round-trip
auto loaded = aspose::email::foss::msg::mapi_message::from_file(
std::filesystem::path("converted.msg"));
loaded.save_to_eml(std::filesystem::path("roundtrip.eml"));
std::cout << "Saved converted.msg and roundtrip.eml\n";
}مشكلات و تصحيحات مشتركة
الوضع الثنائي غير محدد على التدفق. فتح ملف مع std::ifstream input("file.msg") بدون std::ios::binary قد يؤدي إلى ترجمة Windows line-end التي تفسد CFB حاوية - Pass std::ios::binary لكل من الدخول والخروج.
خطأ اليسار : AsposeEmailFoss::AsposeEmailFoss لا يوجد . تحقق من ذلك add_subdirectory(Aspose.Email-FOSS-for-Cpp) ظهرت قبل target_link_libraries(...) فيك CMakeLists.txt,ولهذا السبب، فإن اسم المديرية يطابق المجلد المسلح بالضبط.
C++17 غير مسموح به. يتطلب المكتبة ميزات C++17 إذا أبلغ الكمبيوتر عن أخطاء عن الارتباطات المنظمة أو std::filesystem,إضافة set(CMAKE_CXX_STANDARD 17) في The أعلى منك CMakeLists.txt قبل أن يُعطى add_subdirectory اتصلت .
موضوع فارغ أو جسم بعد القراءة. بعض ملفات MSG تخزين النص في خصائص Unicode بينما يستخدم الآخرون خصائص صفحة الرمز ANSI. message.subject() و message.body() إرجاع السلسلة من أي تخزين موجود؛ تحقق message.html_body() إذا كان message.body() هو فارغ .
load_from_eml يضعها على EML المكسور. تأكد من أن ملف EML يستخدم RFC 5322 خط النهايات (CRLF) ولديه عناوين MIME صالحة.المكتبة لا تتلاشى بهدوء رؤوس مضللة .
الأسئلة المتكررة
هل تتطلب المكتبة Microsoft Outlook أو أي مكون COM؟?
لا Aspose.Email FOSS for C++ يستخدم شريط CFB و MAPI الخاص به ولديه أي إدمانات من طرف ثالث.
ما هي النماذج التي يمكنني قراءة الكتابة؟?
يتم دعم MSG (رسالة Outlook) و EML (RFC 5322 / MIME) ومجموعة CFB (ملفات مترابطة) للقراءة والكتابة.
كيف يمكنني حفظ رسالة إلى بايتات بدلاً من ملف؟?
مكالمة save() أو save_to_eml() لا توجد أسباب، كلاهما يعود. std::vector<std::uint8_t>,يمكنك كتابة أي بوفير أو تدفق.
ما هي المعايير C++ التي يجب أن تكون متاحة؟?
C++17: يُستخدم المكتبة في std::filesystem, std::optional, و غيرها C++17 يتم تصنيف ميزات المكتبة القياسية GCC 9+ و Clang 10+ وما إلى ذلك على أنها مدعومة في مشروع إعادة التدوير.
هل هناك إصدار مدير الحزمة (vcpkg، كونان)؟?
الإصدار 0.1.0 يتم توزيعها فقط من خلال المصدر. add_subdirectory كما هو موضح أعلاه.يمكن إضافة علامات مدير الحزمة في المستقبل إطلاق سراح .