MSG fájlok olvasása

MSG fájlok olvasása

mapi_message Az Outlook MSG fájlok betöltése és elemzése. Egyetlen hívja fel: from_file() vagy a következő: from_stream() Olvassa el a teljes CFB konténert, kivonja az összes MAPI-t. tulajdonságok, és kiteszi őket a betűzött hozzáférési módszerek nincs Outlook telepítés szükséges.


Tárgy útvonalból töltés

Használat 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';
}

A folyó terhelése

Használat mapi_message::from_stream() a hálózati csatlakozóból érkező MSG-adatok, és archívum, vagy bármely más 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';
}

Mindig nyissa ki a csatornát. std::ios::binary. A szöveges módban történő csatornázás a fordítás sorát jelenti. A CFB-tartályt elrontották.


Az Access üzenet tulajdonságai

mapi_message A leggyakoribb üzenet tulajdonságokat néven kapottként mutatja ki:

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

Iterált címzettek

message.recipients() az a-t adja vissza. std::vector a címzett objektumok, amelyekben az display_name, email_address,és a következők: 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';
    }
}

Iterált mellékletek

message.attachments() az a-t adja vissza. std::vector A fentiek mindegyike a következőket mutatja be: filename, mime_type, data, content_id,és a következők: 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()));
        }
    }
}

Beágyazott üzenetek elérése

Mikor? is_embedded_message() az a true, a melléklet egy másik MSG fájlt tartalmaz. Hozzáférés: 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"));
        }
    }
}

Tippek és legjobb gyakorlatok

  • Mindig átjutsz. std::ios::binary a … std::ifstream az MSG-fájlok betöltésekor.
  • A csekk. html_body() előzőleg body() A csak HTML üzenetek tartalmát a weboldalon tárolják. HTML test tulajdonság és hagyni body() üres.
  • from_file() A nagy MSG fájlok esetében a következőket kell figyelembe venni: a alatti tartály megnyitása, msg_reader a metaadatok teljes körű ellenőrzése nélkül. a csatolt byte-k materializálása.
  • A Bizottság strict paraméter a from_file(path, strict) és a következők: from_stream(stream, strict) a nem teljesítésre vonatkozó kötelezettségek false, amely a valós MSG-fájlokban kisebb szerkezeti eltéréseket tolerál.
  • A címzett objektumok kimutatása recipient_type a To, Cc és Bcc bejegyzések megkülönböztetése.

Általános kérdések

A kérdésOkokMegjavítani.
msg_exception egy érvényesnek tűnő fájlban.A fájl nem egy eredeti OLE CFB konténer.Ellenőrizni a cfb_reader::from_file() ha szintén dob, a fájl nem érvényes MSG.
body() üres szalagot ad vissza.Az üzenet csak HTML-testben található.Használat html_body() helyette.
recipients() üres.Idősebb MSG a fogadó táblázat nélkülHozzáférés display_to a következők: get_property_value() az common_message_property_id::display_to
Windows-on bekövetkezett csatorna romlásA folyó nyitva van std::ios::binaryHozzáadás std::ios::binary zászló std::ifstream
Nagy memóriafelhasználás a nagy fájlokhozAz összes csatolt adatot előzetesen töltöttük be.Használat msg_reader alacsony szintű hozzáférés teljes megvalósulása nélkül

FAQ

- Igen. from_file() Nyitva tartod az aktát?

Nem. A fájl kinyitva, teljesen elemzve és bezárva van a módszer visszatérése előtt. Az hívás után elmozdíthatja vagy törölheti az eredetfájlt.

Honnan tudhatom, hogy egy melléklet fájl vagy beágyazott MSG?

Hívj! attachment.is_embedded_message().Visszatérések. true beágyazott MSG-fájlok esetében; false a rendszeres fájlcsomagokhoz. A beágyazott üzenetekhez, lépjen hozzá az övezett objektumhoz a következők: attachment.embedded_message.

Mi a különbség az EU és az Egyesült Királyság között? from_file() és felhasználása msg_reader?

mapi_message::from_file() a magas szintű API az egész üzenetet elemez és a tulajdonságokat típusosított mezőkként mutatja ki. msg_reader az alacsony szintű olvasó, amely megadja a hozzáférést a nyers CFB tartályszerkezethez, és hasznos akkor, ha meg kell vizsgálni az üzenet elrendezése minden MAPI tulajdonság elemzés nélkül.

A Unicode és az ANSI MSG fájlok támogathatók?

  • Igen, én is. mapi_message a Unicode (szolgáltatási típus) és az E-Code (az adatbázis). ptyp_string) és az ANSI (ptyp_string8) szalag tulajdonságai. unicode_strings() adományok true üzenetek esetében Unicode tulajdonságokkal tárolt.

API-referencia összefoglaló

Rendszer / módszerLeírás
mapi_message::from_file(path)Töltse be egy MSG fájlt a std::filesystem::path
mapi_message::from_file(path, strict)A szigorú üzemmódos beállítással történő terhelés
mapi_message::from_stream(stream)A MSG-terhelés a std::istream
mapi_message::from_stream(stream, strict)A strömből történő terhelés szigorú üzemmódos lehetőséggel
mapi_message::subject()Visszaadja az üzenet témakörét.
mapi_message::body()A szöveget visszaadja a rendszerben.
mapi_message::html_body()Visszaadja a HTML-testet (ha nincs, üres)
mapi_message::sender_name()Visszaadja a küldő megjelenítési nevét
mapi_message::sender_email_address()Visszaadja a küldő e-mail címét
mapi_message::internet_message_id()Visszaadja az RFC 2822 üzenet-ID címét
mapi_message::message_class()Visszaadja a MAPI üzenetosztályt .
mapi_message::recipients()Visszaadja a címzetteket.
mapi_message::attachments()Visszaadja a csatolt listát.
mapi_attachment::is_embedded_message()Igaz, ha a csatlakoztatás beágyazott MSG-t tartalmaz.
mapi_message::unicode_strings()Igaz, ha az üzenet Unicode szalag tulajdonságait használja
 Magyar