Læse MSG-filer

Læse MSG-filer

mapi_message er indgangspunktet for at indlæse og analysere Outlook MSG-filer. En enkelt opkald til from_file() eller en anden from_stream() læser den fulde CFB-beholder, udtrækker alle MAPI’er ingen Outlook-installation Det er nødvendigt.


Lade fra en filvej

Anvendelse: mapi_message::from_file() med en 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';
}

Last fra en strøm

Anvendelse: mapi_message::from_stream() når MSG-data ankommer fra et netværkssocket, og en - eller et andet arkiv. 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';
}

Åbn altid strømmen med: std::ios::binary.Tekst-modus strømme oversætte linje Endinger på Windows og beskadige CFB containeren.


Adgangsbeskedsegnelser

mapi_message afslører de mest almindelige meddelelsesegenskaber som navngivne gettere:

#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";
}

Itererede modtagere

message.recipients() returnerer en std::vector af modtagereobjekter med display_name, email_address, og 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';
    }
}

Itererede vedhæftede filer

message.attachments() returnerer en std::vector De er alle i stand til at udvise en række forskellige former for indbyrdes kontakt. filename, mime_type, data, content_id, og 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()));
        }
    }
}

Adgang til indlejrede meddelelser

Hvornår? is_embedded_message() er: true, bilaget indeholder en anden MSG-fil. Tilgang via: 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"));
        }
    }
}

Tips og bedste praksis

    • Altid passerer. std::ios::binary til std::ifstream ved indlæse af MSG-filer.
  • Kontrollering html_body() før body() Kun HTML-meddelelser gemmer deres indhold i HTML-legemeegenskaber og forlad body() - Det er tomt.
  • from_file() For store MSG-filer kan man overveje at bruge en anden metode. åbning af den underliggende beholder med: msg_reader at kontrollere metadata uden fuldt ud at materialiserende vedhæftede byte.
  • Den Europæiske Union strict Parametre for: from_file(path, strict) og: from_stream(stream, strict) Forfald til false, der tolererer mindre strukturelle afvigelser i virkelige MSG-filer.
  • Modtagerobjekter afslører recipient_type at skelne mellem To-, Cc- og Bcc-optagelser.

Almindelige problemer

Udgave:Årsagen til detteForklaret
msg_exception på en gyldig filFilen er ikke en ægte OLE CFB-beholderVerificer med: cfb_reader::from_file() hvis det også kaster, er filen ikke en gyldig MSG
body() returnerer tomt stringMelding bruger kun HTML-legemetAnvendelse: html_body() i stedet for
recipients() er tomt.Ældre MSG uden modtagertabellTilgang til display_to via: get_property_value() med: common_message_property_id::display_to
Stream-korruption på WindowsStrømmet åbnet uden std::ios::binaryTilføjning std::ios::binary Flag til std::ifstream
Stor hukommelsesafgift for store filerAlle vedhæftede data er indlæst på forhånd.Anvendelse: msg_reader for adgang på lavt niveau uden fuld materialisering

FAQ

- Ja. Det gør det. from_file() - Hold filhåndtaget åbent?

Filen åbnes, analyseres og lukkes før metoden returneres. Du kan flytte eller slette kilden efter opkaldet.

Hvordan ved jeg, om et bilag er en fil eller en indlejret MSG?

Ring til mig. attachment.is_embedded_message().- Indtægter true for indlejrede MSG-filer; false For indlejrede meddelelser, få adgang til den indelejste objekt via: attachment.embedded_message.

Hvad er forskellen mellem: from_file() og anvendelse af: msg_reader?

mapi_message::from_file() er API på højt niveau det analyserer hele meddelelsen og udstiller egenskaber som typede felter. msg_reader er den lavt niveau læser, der giver adgang til den rå CFB container struktur og er nyttigt, når du har brug for at inspektere MAPI-egenskaberne skal analyseres.

Støttes både Unicode- og ANSI MSG-filer?

  • Ja, det er jeg. mapi_message håndterer både Unicode (egentlighedstype) og ptyp_string) og ANSI (ptyp_string8) strengeegenskaber. unicode_strings() Indberetninger true for meddelelser gemt med Unicode-egenskaber.

API-referenceoversigt

Klasse/metodeBeskrivelse:
mapi_message::from_file(path)Lade en MSG-fil fra et std::filesystem::path
mapi_message::from_file(path, strict)Last med streng tilstand mulighed
mapi_message::from_stream(stream)Last af MSG fra en std::istream
mapi_message::from_stream(stream, strict)Last fra strøm med streng tilstand mulighed
mapi_message::subject()Vend indholdet af meddelelsen tilbage
mapi_message::body()Tilbagevis den almindelige tekst
mapi_message::html_body()Tilbagevis HTML-legemet (tomt, hvis det ikke er til stede)
mapi_message::sender_name()Tilbagevis senderens visningsnavn
mapi_message::sender_email_address()Tilbagevis e-mail adressen til afsender
mapi_message::internet_message_id()Tilbagevis RFC 2822-meddelelseselementets overskrift
mapi_message::message_class()Returnering af MAPI-meddelelsesserien
mapi_message::recipients()Tilbagevis modtagerlisten
mapi_message::attachments()Tilbagevis vedhæftede filer
mapi_attachment::is_embedded_message()Sandt, hvis vedhæftningen er en indlejret MSG
mapi_message::unicode_strings()Sandt, hvis meddelelsen bruger Unicode-strengegenskaber
 Dansk