איך להתחיל עם Aspose.Email FOSS עבור C++

איך להתחיל עם Aspose.Email FOSS עבור C++

Aspose.Email FOSS עבור C++ היא ספרייה לקריאת וכתיבת קבצי Outlook MSG, הודעות EML, ומכולות CFB. אין לה תלות צד שלישי והיא דורשת רק מהדר C++17 ו‑CMake.

שלב 1 – Clone and Add to Your CMake Project

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

הוסף את הספרייה כמנהל תת-קרקעי והחבר אותה ל- Your Library. 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 ומציג את כל MAPI תכונות באמצעות שיטות תוספים טופס.אין צורך בהתקנה של 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(),לאחר מכן, תתבצע הסדרה עם 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 שורה-סוף אשר קורבן את 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 משתמש ב RFC 5322 קצה שורה (CRLF) ויש לו כותרות MIME בתוקף.הספרייה אינה מפסיקה בשקט ראשי הזיתים.

שאלות נפוצות שואלים

האם הספרייה דורשת Microsoft Outlook או כל מרכיב COM?

לא. Aspose.Email FOSS עבור C++ משתמשת CFB משלה ו MAPI ואין לה תלויות צד שלישי.

אילו פורמטים אני יכול לקרוא ולכתוב?

MSG (Outlook Message), EML (RFC 5322 / MIME), ו‑CFB (Compound File Binary) נתמכים הן לקריאה והן לכתיבה. TNEF (winmail.dat), IMAP, SMTP, ו‑POP3 אינם נתמכים.

כיצד ניתן לשמור הודעה לביט במקום קובץ?

Call save() או save_to_eml() אין שום סיבה, שניהם חוזרים. std::vector<std::uint8_t>, אשר אתה יכול לכתוב לכל בופר או זרם.

מהו תקן C++ הנדרש?

C++17: הספרייה משתמשת ב- std::filesystem, std::optional, ועוד C++17 תכונות ספרייה סטנדרטיות.GCC 9+, Clang 10+ ו- MSVC 2019+ מופיעים כתומכים ב פרויקט זה מתכונן.

האם יש שחרור של מנהל חבילות (vcpkg, Conan)?

גרסה 0.1.0 מופץ רק באמצעות מקור.קלאון המאגר ושימוש add_subdirectory כפי שהוצג לעיל.מנגיני מנהל חבילות עשויים להיות מוסיפים בעתיד שחרור .

ראה גם

 עברית