Čítanie súborov MSG

Čítanie súborov MSG

mapi_message je vstupný bod pre načítanie a analýzu súborov Outlook MSG. Jediný Zavolajte na: from_file() alebo: from_stream() číta celý CFB kontajner, extrahuje všetky MAPI vlastnosti, a vystavuje ich prostredníctvom typovaných prístupových metód žiadna inštalácia Outlook je potrebné.


Naloženie z cesty súboru

Použitie: mapi_message::from_file() s dĺžkou: 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';
}

Zaťaženie z prúdu

Použitie: mapi_message::from_stream() pri príchode údajov MSG z sieťového zásuvky, a archív alebo akýkoľvek iný archiv, ktorý je v súlade s článkom 3 ods. 1 písm. a) až c). 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';
}

Vždy otvorte prúd s std::ios::binary.Textové prúdy prekladajú riadok . Koncovky na Windows a poškodil CFB kontajner.


Vlastnosti správy Access

mapi_message odhaľuje najbežnejšie vlastnosti správ ako pomenované gettery:

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

Iterované príjemcovia

message.recipients() vráti a std::vector Objekty príjemcov s: display_name, email_address,a) 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';
    }
}

Iterované prílohy

message.attachments() vráti a std::vector Každý z nich odhaľuje, že sa na ňom nachádzajú rôzne objekty. filename, mime_type, data, content_id,a) 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()));
        }
    }
}

Prístup k vloženým správam

Kedy? is_embedded_message() je: true, príloha obsahuje ďalší súbor MSG. Prístup cez: 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"));
        }
    }
}

Tipy a najlepšie postupy

  • Vždy prejdite. std::ios::binary na: std::ifstream pri načítaní súborov MSG.
  • Prehľad html_body() predtým body() Správy iba s HTML ukladajú svoj obsah v systéme HTML vlastnosť tela a nechať body() prázdny.
  • from_file() Pre veľké súbory MSG, zvážte: otvorenie podkladového kontajnera s msg_reader prezerať metadata bez úplného materializácia bajtov pripojenia.
  • Úrad pre bezpečnosť a ochranu zdravia strict parametre from_file(path, strict) a) from_stream(stream, strict) zlyhanie na false, ktoré tolerujú menšie štrukturálne odchýlky v reálnych súboroch MSG.
  • Objekty príjemcu odhaľujú: recipient_type rozlišovať položky To, Cc a Bcc.

Spoločné problémy

VýstavaPríčina:Oprava
msg_exception na platnom súbore, ktorý vyzerá ako správny.Súbor nie je originálny kontajner OLE CFB .Overte s: cfb_reader::from_file() ak tiež hodí, súbor nie je platný MSG
body() vráti prázdny reťazčekSpráva používa iba HTML telo .Použitie: html_body() namiesto toho
recipients() je prázdny.Starší MSG bez tabuľky príjemcovPrístup display_to cez: get_property_value() s: common_message_property_id::display_to
Zhoršenie vysielania v systéme WindowsPrúd otvorený bez: std::ios::binaryPridať std::ios::binary Vlajka na: std::ifstream
Vysoká spotreba pamäte pre veľké súboryVšetky údaje o pripojení sú načítané vopred.Použitie: msg_reader pre prístup na nízkej úrovni bez úplného zistenia,

FAQ

Je to tak ? from_file() nechať otvorený rukoväť na súbory?

Nie. Súbor sa otvára, úplne analyzuje a zatvára pred návratom metódy. Môžete presunúť alebo odstrániť zdrojový súbor po volaní.

Ako môžem zistiť, či je príloha súbor alebo vložený MSG?

Zavolajte . attachment.is_embedded_message().- Vrátenie true pre vložené súbory MSG; false pre bežné prílohové súbory. Pre vložené správy, prístup k vkladanej objekty cez: attachment.embedded_message.

Aký je rozdiel medzi: from_file() a používanie: msg_reader?

mapi_message::from_file() je high-level API analyzuje celú správu a odhaľuje vlastnosti ako typované polia. msg_reader je nízkonúrovňový čítač, ktorý dáva prístup k surovej konštrukcii kontajnera CFB a je užitočný, keď potrebujete skontrolovať rozloženie správy bez analýzy všetkých vlastností MAPI.

Sú podporované súbory Unicode a ANSI MSG?

  • Áno, áno. mapi_message spracováva Unicode (typ vlastností) ptyp_string) a ANSI (ptyp_string8) vlastnosti reťazca. unicode_strings() výnosy true pre správy uložené s vlastnosťami Unicodu.

Zhrnutie referenčného API

Trieda / metódaOpis:
mapi_message::from_file(path)Nahradenie súboru MSG z std::filesystem::path
mapi_message::from_file(path, strict)Zaťaženie s možnosťou prísneho režimu
mapi_message::from_stream(stream)Zaťaženie MSG z std::istream
mapi_message::from_stream(stream, strict)Zaťaženie z prúdu s možnosťou prísneho režimu
mapi_message::subject()Vrátiť reťazca predmetu správy .
mapi_message::body()Vrátiť telo v normálnom texte
mapi_message::html_body()Vrátiť telo HTML (prázdne, ak nie je prítomné)
mapi_message::sender_name()Vrátiť zobrazenie mena odosielateľa
mapi_message::sender_email_address()Vrátiť e-mailovú adresu odosielateľa
mapi_message::internet_message_id()Vrátiť náčelník RFC 2822 ID správy
mapi_message::message_class()Vrátiť reťaz MAPI správy triedy
mapi_message::recipients()Vrátiť zoznam príjemcov .
mapi_message::attachments()Vrátiť zoznam pripojených dokumentov .
mapi_attachment::is_embedded_message()Pravda, ak je pripojenie vložené MSG.
mapi_message::unicode_strings()Pravda , ak správa používa vlastnosti reťazca Unicode .
 Slovenčina