كيفية البدء مع Aspose.Email FOSS لـ C++

كيفية البدء مع 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 كما هو موضح أعلاه.يمكن إضافة علامات مدير الحزمة في المستقبل إطلاق سراح .

انظر أيضا

 العربية