Διαβάστε τα αρχεία MSG

Διαβάστε τα αρχεία MSG

mapi_message είναι το σημείο εισόδου για την φόρτωση και τη διαγραφή αρχείων του Outlook MSG. καλέστε το from_file() ή from_stream() Διαβάζει το πλήρες δοχείο CFB, εκχύλιση όλων των MAPI ιδιότητες, και τα εκθέτει μέσω των μεθόδων τυποποιημένων πρόσθετων — καμία εγκατάσταση του Outlook απαιτητική .


Κατεβάστε από ένα αρχείο δρόμο

Χρησιμοποιήστε mapi_message::from_file() Με το A std::filesystem::path:

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

int main()
{
    const auto message = aspose::email::foss::msg::mapi_message::from_file(
        std::filesystem::path("sample.msg"));

    std::cout << "Subject: " << message.subject() << '\n';
    std::cout << "From:    " << message.sender_name()
              << " <" << message.sender_email_address() << ">\n";
    std::cout << "Body:    " << message.body() << '\n';
}

Κατεβάστε από μια ροή

Χρησιμοποιήστε mapi_message::from_stream() Όταν τα δεδομένα MSG προέρχονται από ένα δίκτυο, το Αρχείο ή οποιοδήποτε άλλο std::istream:

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

int main()
{
    std::ifstream input("sample.msg", std::ios::binary);
    const auto message = aspose::email::foss::msg::mapi_message::from_stream(input);

    std::cout << "Subject: " << message.subject() << '\n';
}

Πάντα ανοίξτε το ρεύμα με std::ios::binary.Tex-mode Streams γραμμή μετάφρασης Τερματίζει τα Windows και διαφεύγει το CFB.


Διαθέσιμο μήνυμα ιδιότητες

mapi_message εκθέτει τις πιο κοινές ιδιότητες του μηνύματος, όπως ονομάζονται καμπυλό:

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

int main()
{
    const auto message = aspose::email::foss::msg::mapi_message::from_file(
        std::filesystem::path("sample.msg"));

    // Core properties
    std::cout << "Subject:          " << message.subject() << '\n';
    std::cout << "Sender name:      " << message.sender_name() << '\n';
    std::cout << "Sender email:     " << message.sender_email_address() << '\n';
    std::cout << "Internet msg-id:  " << message.internet_message_id() << '\n';
    std::cout << "Message class:    " << message.message_class() << '\n';

    // Body — check html_body() first; fall back to plain body()
    const auto& body = message.html_body().empty()
        ? message.body()
        : message.html_body();
    std::cout << "Body length: " << body.size() << " chars\n";
}

ΙΤΡΕΑΤΑ ΑΝΘΡΩΠΟΥΣ

message.recipients() Επιστρέφει ο Α std::vector από αντικείμενα που απορρέουν από display_name, email_address,και recipient_type:

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

int main()
{
    const auto message = aspose::email::foss::msg::mapi_message::from_file(
        std::filesystem::path("sample.msg"));

    for (std::size_t i = 0; i < message.recipients().size(); ++i)
    {
        const auto& r = message.recipients()[i];
        std::cout << "[" << (i + 1) << "] "
                  << r.display_name << " <" << r.email_address << ">"
                  << "  type=" << r.recipient_type << '\n';
    }
}

Ιταλία Αλληλεγγύη

message.attachments() Επιστρέφει ο Α std::vector Ετικέτες: Κάθε εκθέσιμο αντικείμενο filename, mime_type, data, content_id,και is_embedded_message():

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

int main()
{
    const auto message = aspose::email::foss::msg::mapi_message::from_file(
        std::filesystem::path("sample.msg"));

    for (const auto& a : message.attachments())
    {
        std::cout << a.filename
                  << "  " << a.mime_type
                  << "  " << a.data.size() << " bytes"
                  << "  embedded=" << (a.is_embedded_message() ? "yes" : "no")
                  << '\n';

        if (!a.is_embedded_message())
        {
            std::ofstream out("extracted_" + a.filename, std::ios::binary);
            out.write(reinterpret_cast<const char*>(a.data.data()),
                      static_cast<std::streamsize>(a.data.size()));
        }
    }
}

Εισαγωγή ενσωματωμένων μηνυμάτων

Όταν is_embedded_message() Είναι true,Το αρχείο περιέχει ένα άλλο αρχεία MSG. Πρόσβαση μέσω attachment.embedded_message:

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

int main()
{
    const auto message = aspose::email::foss::msg::mapi_message::from_file(
        std::filesystem::path("sample.msg"));

    for (const auto& a : message.attachments())
    {
        if (a.is_embedded_message() && a.embedded_message != nullptr)
        {
            const auto& inner = *a.embedded_message;
            std::cout << "Embedded subject: " << inner.subject() << '\n';
            inner.save(std::filesystem::path("embedded.msg"));
        }
    }
}

Συμβουλές και βέλτιστες πρακτικές

  • Πάντα πέρασε std::ios::binary Για να std::ifstream Όταν φορτώνετε αρχεία MSG.
  • Ελέγξτε html_body() Πρώτα body() - Τα μηνύματα HTML μόνο αποθηκεύουν το περιεχόμενό τους στο HTML σώμα ιδιοκτησία και αφήσει body() άδειο .
  • from_file() Κατεβάζει όλα τα δεδομένα προσθήκης στη μνήμη. για μεγάλα αρχεία MSG, εξετάστε ανοίγει το υποκείμενο δοχείο με msg_reader Ελέγξτε τα μεταδεδομένα χωρίς να το κάνετε πλήρως. υλικοποίηση των μπαίτων προσθήκης.
  • Η strict Παραμέτρους της from_file(path, strict) και from_stream(stream, strict) Οι παραλείψεις για false, ανεκτικό σε μικρές διαρθρωτικές αποκλίσεις στα αρχεία MSG του πραγματικού κόσμου.
  • Εμφανίζονται αντικείμενα απορροής recipient_type να διακρίνουν τα εισιτήρια To, Cc και Bcc.

κοινά ζητήματα

ΘέμαΑιτίαΦΙΛΕΞΗ
msg_exception Σε ένα έγκυρο αρχείοΤο αρχείο δεν είναι ένα πραγματικό container OLE CFBΕλέγξτε με cfb_reader::from_file() - αν επίσης ρίχνει, το αρχείο δεν είναι έγκυρο MSG
body() Επιστρέφει άδειο ράφιΤο μήνυμα χρησιμοποιεί μόνο το σώμα HTMLΧρησιμοποιήστε html_body() Αντί να
recipients() Είναι άδειοΠαλαιότερα MSG χωρίς πίνακα παραλήπτηΠρόσβαση display_to μέσω get_property_value() Με common_message_property_id::display_to
Διαφθορά στα WindowsΤο ρεύμα ανοίγει χωρίς std::ios::binaryΠροσθέστε std::ios::binary Σημαία για std::ifstream
Χρησιμοποιήστε υψηλή μνήμη για μεγάλα αρχείαΌλα τα δεδομένα προσθήκης φορτώνονται μπροστάΧρησιμοποιήστε msg_reader - για χαμηλό επίπεδο πρόσβασης χωρίς πλήρη υλιστοποίηση

FAQ

Η ΚΕ from_file() Να κρατάτε το αρχείο ανοιχτό;?

Το αρχείο ανοίγει, διαχωρίζεται πλήρως και κλείνει πριν επιστρέψει η μέθοδος.Μπορείτε να μετακινήσετε ή να διαγράψετε το αρχικό αρχείου μετά την κλήση.

Πώς μπορώ να πω αν ένα συνημμένο είναι αρχείο ή ενσωματωμένο MSG;?

Κλήση attachment.is_embedded_message().Επιστροφή true για τα ενσωματωμένα αρχεία MSG,; false για τακτικά συνημμένα αρχείων. Για ενσωματωμένες μηνύματα, πρόσβαση στο αποσυνδεδεμένο αντικείμενο μέσω attachment.embedded_message.

Ποια είναι η διαφορά μεταξύ from_file() και χρησιμοποιώντας msg_reader?

mapi_message::from_file() είναι το υψηλού επιπέδου API - διαγράφει το πλήρες μήνυμα και Εμφανίζει ιδιότητες ως τυποποιημένα πεδία. msg_reader Είναι ο χαμηλός αναγνώστης που δίνει πρόσβαση στη δομή του καυσίμου CFB και είναι χρήσιμο όταν χρειάζεται να ελέγξετε Η διαμόρφωση μηνυμάτων χωρίς να παραλύει όλες τις ιδιότητες MAPI.

Είναι τα αρχεία Unicode και ANSI MSG υποστηρίζονται;?

Ναι . mapi_message Εξυπηρετεί και τους δύο Unicode (τυπικό είδος ιδιοκτησίας) ptyp_stringκαι ANSI (ptyp_string8• Σύνδεση ιδιοτήτων. unicode_strings() Επιστροφή true Για μηνύματα Αποθηκεύονται με ιδιότητες Unicode.


Συνοπτική αναφορά API

Κλάση / ΜέθοδοςΠεριγραφή
mapi_message::from_file(path)Κατεβάστε ένα αρχείο MSG από το A std::filesystem::path
mapi_message::from_file(path, strict)Ενεργοποίηση με αυστηρή επιλογή mode
mapi_message::from_stream(stream)Εισαγωγή MSG από ένα std::istream
mapi_message::from_stream(stream, strict)Κατεβάστε από το ρεύμα με επιλογή αυστηρού τρόπου
mapi_message::subject()Επιστροφή του μηνύματος υποκείμενο σάρος
mapi_message::body()Επιστροφή του σώματος κειμένου
mapi_message::html_body()Επιστροφή του σώματος HTML (αδενός εάν δεν υπάρχει)
mapi_message::sender_name()Επιστρέψτε το όνομα της οθόνης αποστολέα
mapi_message::sender_email_address()Επιστροφή της διεύθυνσης ηλεκτρονικού ταχυδρομείου του αποστολέα
mapi_message::internet_message_id()Επιστροφή του RFC 2822 Message-ID Header
mapi_message::message_class()Επιστροφή της κλάσης MAPI μήνυμα γραμμή
mapi_message::recipients()Επιστροφή στη λίστα αποδέκτων
mapi_message::attachments()Επιστροφή στη λίστα προσθήκης
mapi_attachment::is_embedded_message()Αληθινή εάν το προσάρτημα είναι ένα ενσωματωμένο MSG
mapi_message::unicode_strings()Αληθινή εάν το μήνυμα χρησιμοποιεί ιδιότητες σιδήρου Unicode
 Ελληνικά