Hogyan lehet olvasni MSG fájlokat C++

Hogyan lehet olvasni MSG fájlokat C++

Aspose.Email FOSS for C++ lets you open and parse Outlook MSG files with a single A funkció hívás. mapi_message::from_file() és mapi_message::from_stream() Töltse le a teljes üzenet – téma, test, küldő, vevő és melléklet – egy memóriába A fentiek nem tartalmazzák a Outlook vagy COM függőséget.

1. lépés - A projekt beállítása

Klónozza a tárolót, és adja hozzá a saját CMakeLists.txt:

git clone https://github.com/aspose-email-foss/Aspose.Email-FOSS-for-Cpp.git
add_subdirectory(Aspose.Email-FOSS-for-Cpp)
target_link_libraries(your_target PRIVATE AsposeEmailFoss::AsposeEmailFoss)

2. lépés - A fejléc beillesztése

#include "aspose/email/foss/msg/mapi_message.hpp"

Ez a header biztosítja az mapi_message Minden támogatott személy a aspose::email::foss::msg A névtér.


3. lépés - Üzenet feltöltése egy fájlútból

használja mapi_message::from_file() Ha van egy 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';
}

4. lépés – Üzenet feltöltése egy Stream-ből

használja mapi_message::from_stream() A parszi bármilyen std::istream Hasznos a A hálózaton vagy a memóriában található pufferből kapott MSG adatok feldolgozása:

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

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

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

Mindig nyissa meg a szálat std::ios::binary A végső soron a végsőkig tartó A CFB konténer megsemmisítésének módja.


5. lépés - Iterate receptorok

message.recipients() Visszatér a std::vector A fogadó objektumok, mindegyik a display_name, email_address,és recipient_type A mezők:

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

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

    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';
    }
}

6. lépés - Iterate attachments

message.attachments() Visszatér a std::vector A tárgyi tárgyak, minden egyes tároló kiállítók filename, mime_type, data (A nyers bájtok, content_id,És a is_embedded_message() A prédikáció:

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

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

    for (std::size_t i = 0; i < message.attachments().size(); ++i)
    {
        const auto& a = message.attachments()[i];
        std::cout << "[" << (i + 1) << "] "
                  << a.filename << "  mime=" << a.mime_type
                  << "  bytes=" << a.data.size()
                  << "  embedded=" << (a.is_embedded_message() ? "yes" : "no")
                  << '\n';
    }
}

Közös problémák és fixok

üresen body() A rakodás után. Egyes üzenetek csak a HTML testben tárolnak szöveget Ingatlanok - Ellenőrizze message.html_body() Mikor message.body() Egy üres szálat ad vissza.

A szalagot nem nyitották meg std::ios::binary. A szövegszövegek fordításának módja CRLF szekvenciák, csendben megrontja a bináris CFB adatokat. Mindig nyissa ki a MSG fájlokat std::ios::binary.

msg_exception A fájl érvényes megjelenésű. Ellenőrizze, hogy a fájl valódi MSG Egyes exportáló eszközök által mentett fájlok lehetnek egyszerű szöveg vagy MIME és nem lehet megosztani a mapi_message::from_file().

recipients() Egy üres vektorot ad vissza. A régi MSG fájlok néha kihagyják a címzettet A képernyőn, de a címzettjei is megjelenítik a display_to A tulajdonosok a hozzáféréshez message.get_property_value() A common_message_property_id::display_to és property_type_code::ptyp_string.

Nagy mennyiségű adat tárolható a memóriában. Amapi_message::from_file() és from_stream() töltse fel az egész üzenetet, beleértve az összes melléklet-byte-t. Nagy fájlok esetén nyissa meg a Tartályok tárolása a msg_reader A teljes körű ellenőrzés nélkül a materializálják őket.

Gyakran feltett kérdések

Mi a különbség a from_file() és from_stream()?

Mindkettő azonos termelést eredményez mapi_message Az objektum. from_file() Elfogadják a std::filesystem::path A fájlt belsőleg nyissa meg. from_stream() Olvasás a Bármely std::istream adatait – akkor hasznos, ha a MSG adat már a memóriában van vagy Egy szekéren át érkezik.

A cs from_file() A fájl a betöltés után is nyitva marad.?

Nem. A fájl megnyílik, teljesen átírva a memóriába, és bezárva előtt from_file() A forrásfájlt a hívás után azonnal áthelyezheti vagy törölheti.

Elolvashatom a MSG fájlokat, amelyeket Outlook hozott létre amacOS vagy Linux oldalon?

A MSG formátum (OLE Compound File + MAPI tulajdonságok) a Operációs rendszerek - bármely .msg A Outlook bármely verziójának fájlja megnyitható A mapi_message::from_file().

Hogyan olvassam el a HTML testet?

hívás message.html_body().Ha az üzenetet csak egy egyszerű szövegtestgel hozták létre, Ez egy üres szálat ad vissza. message.body() Visszaadja a tiszta szöveg testet.

A szigorú mód az alapértelmezett?

mapi_message::from_file(path, strict) és from_stream(stream, strict) Elfogadjuk a opcionális strict Buda. a hiba az false,A kisebb szerkezeti elemekkel szemben A valós világban lévő fájlok.

Ezért is

 Magyar