Πώς να ξεκινήσετε με το 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() διακόπτει το αρχείο του 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(),και μετά να το στείλουμε στο 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 που διαστρεβλώνει το 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) Στο δικό του Πάνω από το δικό σου 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;?

No. Aspose.Email FOSS για C++ χρησιμοποιεί το δικό του CFB και MAPI parser και δεν έχει εξαρτήσεις τρίτων.Είναι λειτουργική στο Linux, macOS και Windows χωρίς εγκατάσταση Outlook.

Ποια μορφή μπορώ να διαβάσω και να γράψω;?

MSG (Outlook Message), EML (RFC 5322 / MIME) και CFB (Compound File Binary) υποστηρίζονται τόσο για ανάγνωση όσο και για γραφικά. TNEF (winmail.dat), IMAP, SMTP και POP3 δεν υποστηρίζεται.

Πώς μπορώ να αποθηκεύσω ένα μήνυμα σε bytes αντί για αρχείο;?

Κλήση save() ή save_to_eml() Δεν υπάρχει καμία ερώτηση, και οι δύο επιστρέφουν. std::vector<std::uint8_t>, το οποίο μπορείτε να γράψετε σε οποιοδήποτε buffer ή ρεύμα.

Ποιο πρότυπο C++ απαιτείται;?

C++17 Η βιβλιοθήκη χρησιμοποιεί το std::filesystem, std::optional,και άλλα C++17 Τα χαρακτηριστικά της τυποποιημένης βιβλιοθήκης.GCC 9+, Clang 10+ και MSVC 2019+ καταχωρίζονται ως υποστηριζόμενα σε: Το πρόγραμμα προετοιμάζεται.

Υπάρχει μια έκδοση του διαχειριστή πακέτου (vcpkg, Conan);?

Η έκδοση 0.1.0 διανέμεται μόνο μέσω της πηγής. Κλωνοποιήστε το αποθεματικό και χρησιμοποιήσετε add_subdirectory Όπως προκύπτει παραπάνω. τα διαφημίσεις του διευθυντή συσκευών μπορούν να προστιθέσουν στο μέλλον Απελευθέρωση .

Δείτε επίσης

 Ελληνικά