Εισαγωγή

Aspose.Email FOSS για C++ είναι μια νέα ανοιχτού κώδικα βιβλιοθήκη για ανάγνωση, δημιουργία και μετατροπή αρχείων Outlook MSG, μηνυμάτων RFC 5322 EML, και των δοχείων Compound File Binary (CFB) στα οποία βασίζεται η μορφή MSG. Είναι γραμμένη σε C++17, δεν έχει εξωτερικές εξαρτήσεις χρόνου εκτέλεσης, και μεταγλωττίζεται σε Linux, macOS και Windows μέσω CMake — δεν υπάρχει εξάρτηση από COM και δεν υπάρχει πλατφόρμα-συγκεκριμένος κώδικας.

Τα αρχεία Outlook MSG εμφανίζονται συνεχώς σε έργα επιχειρησιακής ενσωμάτωσης — αγωγούς αρχειοθέτησης, εργαλεία μετανάστευσης, εξαγωγές συμμόρφωσης — αλλά η ανάγνωσή τους χωρίς το ίδιο το Outlook συνήθως σήμαινε αυτοματοποίηση COM στα Windows ή εμπορική βιβλιοθήκη. Το Aspose.Email FOSS για C++ σας παρέχει μια φορητή εναλλακτική: μια υψηλού επιπέδου κλάση mapi_message για καθημερινή ανάγνωση και δημιουργία μηνυμάτων, καθώς και κατώτερης επιπέδου κλάσεις msg_reader, msg_document και cfb_reader για άμεση πρόσβαση στη βασική μορφή του δοχείου όταν το χρειάζεστε.

Η βιβλιοθήκη διανέμεται ως πηγαίος κώδικας C++17 υπό την άδεια MIT και προστίθεται σε ένα έργο ως υποκατάλογος CMake, εκθέτοντας τον προορισμό AsposeEmailFoss — δεν απαιτείται εγγραφή σε διαχειριστή πακέτων και δεν χρειάζονται προ-συγκροτημένα δυαδικά.


Βασικά Χαρακτηριστικά

Ανάγνωση Αρχείων Outlook MSG

Ανοίξτε ένα αρχείο .msg με msg_reader::from_file() ή msg_reader::from_stream(). Για άμεση πρόσβαση στις αποθηκεύσεις και ροές ενός μηνύματος, τυλίξτε τον αναγνώστη σε ένα msg_document με msg_document::from_reader().

#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"), /*strict=*/false);
auto document = aef::msg::msg_document::from_reader(reader);

Δημιουργία μηνυμάτων προγραμματιστικά

mapi_message::create() δημιουργεί ένα νέο μήνυμα στη μνήμη από θέμα και σώμα. Ορίστε τον αποστολέα, προσθέστε παραλήπτες και επισυνάψτε δυαδικά ή κειμενικά δεδομένα πριν αποθηκεύσετε με save().

#include "aspose/email/foss/msg/mapi_message.hpp"
#include <filesystem>

namespace aef = aspose::email::foss;

auto message = aef::msg::mapi_message::create(
    "Quarterly status update", "Hello team,\n\nRollout summary attached.");
message.set_sender_name("Build Agent");
message.set_sender_email_address("build.agent@example.com");
message.add_recipient("alice@example.com", "Alice Example");
message.add_recipient("carol@example.com", "Carol Example",
    aef::msg::mapi_message::recipient_type_cc);
message.add_attachment("report.txt", std::vector<std::uint8_t>{'o', 'k'}, "text/plain");
message.save(std::filesystem::path("output.msg"));

Μετατροπή μεταξύ MSG και EML

mapi_message::save_to_eml() γράφει το τρέχον μήνυμα ως αρχείο EML σύμφωνα με RFC 5322, και mapi_message::load_from_eml() διαβάζει ένα τέτοιο. Και οι δύο κατευθύνσεις διατηρούν το θέμα, τον αποστολέα, τους παραλήπτες και τα συνημμένα, ώστε ένα μήνυμα να μπορεί να μεταβιβαστεί μεταξύ MSG και EML χωρίς το Outlook.

auto message = aef::msg::mapi_message::from_file(
    std::filesystem::path("message.msg"), /*strict=*/false);
message.save_to_eml(std::filesystem::path("message.eml"));

auto restored = aef::msg::mapi_message::load_from_eml(std::filesystem::path("message.eml"));
restored.save(std::filesystem::path("restored.msg"));

Επιθεώρηση ιδιοτήτων μηνύματος και συνημμένων

Ένα φορτωμένο mapi_message εκθέτει τα τυπικά πεδία κεφαλίδας του άμεσα — subject(), sender_name(), sender_email_address(), message_class() και internet_message_id() — μαζί με recipients() και attachments() ως διανύσματα του mapi_recipient και mapi_attachment. Για πεδία MAPI χωρίς ειδικό πρόσβαση, get_property_value() διαβάζει οποιαδήποτε ιδιότητα με το common_message_property_id και το property_type_code.

#include "aspose/email/foss/msg/mapi_message.hpp"
#include "aspose/email/foss/msg/common_message_property_id.hpp"
#include "aspose/email/foss/msg/property_type_code.hpp"
#include <iostream>

namespace aef = aspose::email::foss;

template <typename E>
constexpr auto to_underlying(E value) noexcept {
    return static_cast<std::underlying_type_t<E>>(value);
}

auto message = aef::msg::mapi_message::from_file(
    std::filesystem::path("message.msg"), /*strict=*/false);

std::cout << "Subject: " << message.subject() << '\n';
std::cout << "From: " << message.sender_name()
           << " <" << message.sender_email_address() << ">\n";
std::cout << "Recipients: " << message.recipients().size() << '\n';

for (const auto& attachment : message.attachments()) {
    std::cout << "- " << attachment.filename
               << " (" << attachment.mime_type << ", "
               << attachment.data.size() << " bytes)\n";
}

const auto display_cc = message.get_property_value(
    to_underlying(aef::msg::common_message_property_id::display_cc),
    to_underlying(aef::msg::property_type_code::ptyp_string));

Πρόσβαση χαμηλού επιπέδου σε δοχεία CFB

Τα αρχεία MSG αποθηκεύονται μέσα σε ένα δοχείο Compound File Binary (CFB) — τη μορφή δομημένης αποθήκευσης που χρησιμοποιείται επίσης από παλαιές δυαδικές μορφές του Office. cfb_reader ανοίγει το ακατέργαστο δοχείο και εκθέτει το δέντρο καταλόγου του άμεσα: storage_ids() και stream_ids() εμφανίζουν κάθε εγγραφή, directory_entry_count() αναφέρει το σύνολο, και header() επιστρέφει τη διάταξη τομέων του δοχείου. Αυτό είναι χρήσιμο όταν χρειάζεστε δεδομένα MAPI που το mapi_message API δεν εμφανίζει.

#include "aspose/email/foss/cfb/cfb_reader.hpp"
#include <iostream>

namespace aef = aspose::email::foss;

auto cfb = aef::cfb::cfb_reader::from_file(std::filesystem::path("message.msg"));
std::cout << "Directory entries: " << cfb.directory_entry_count() << '\n';
std::cout << "Storages: " << cfb.storage_ids().size() << '\n';
std::cout << "Streams: " << cfb.stream_ids().size() << '\n';

Γρήγορη Έναρξη

Προσθέστε τη βιβλιοθήκη στο έργο σας:

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)

Στη συνέχεια, δημιουργήστε ένα μήνυμα, αποθηκεύστε το ως MSG και κάντε round-trip σε EML:

#include "aspose/email/foss/msg/mapi_message.hpp"
#include <filesystem>
#include <vector>
#include <cstdint>

namespace aef = aspose::email::foss;

int main() {
    auto message = aef::msg::mapi_message::create("Hello from C++", "Body text here");
    message.set_sender_name("Alice");
    message.set_sender_email_address("alice@example.com");
    message.add_recipient("bob@example.com", "Bob");
    message.add_attachment("note.txt", std::vector<std::uint8_t>{'a', 'b', 'c'}, "text/plain");
    message.save(std::filesystem::path("hello.msg"));

    auto loaded = aef::msg::mapi_message::from_file(
        std::filesystem::path("hello.msg"), /*strict=*/false);
    loaded.save_to_eml(std::filesystem::path("hello.eml"));

    return 0;
}

Υποστηριζόμενες Μορφές

ΜορφήΕπέκτασηΑνάγνωσηΕγγραφή
Μήνυμα Outlook (MSG).msg✓✓
EML (RFC 5322 / MIME).eml✓✓
Compound File Binary (CFB).cfb✓✓

Ανοιχτός Κώδικας & Άδειες

Aspose.Email FOSS για C++ κυκλοφορεί υπό την άδεια MIT. Ο πλήρης κώδικας είναι διαθέσιμος στο aspose-email-foss/Aspose.Email-FOSS-for-Cpp, και η εμπορική χρήση επιτρέπεται χωρίς δικαιώματα. Η βιβλιοθήκη δεν έχει εξαρτήσεις χρόνου εκτέλεσης πέραν ενός μεταγλωττιστή C++17 και CMake 3.26 ή νεότερης.


Ξεκινώντας

Σχετικοί Πόροι