Miten lukea MSG tiedostoja C++: ssä

Miten lukea MSG tiedostoja C++: ssä

Aspose.Email FOSS for C++ lets you open and parse Outlook MSG files with a single Funktionaalinen puhelu . mapi_message::from_file() ja mapi_message::from_stream() Lataa se täysi viesti – aihe, keho, lähettäjä, vastaanottaja ja liitetiedostot – muistiin Ei ole Outlook- tai COM-riippuvuutta.

Vaihe 1 – Projekti on luotu

Kloonaa tallennus ja lisää se omalle 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)

Vaihe 2 – Sisällytä otsikko

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

Tämä yksittäinen header tarjoaa mapi_message Kaikki tukevat tyyppejä, jotka ovat aspose::email::foss::msg nimenomaan tilaa.


Vaihe 3 – Lataa viesti tiedostopalvelusta

Käytä mapi_message::from_file() Kun sinulla on 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';
}

Vaihe 4 – Lataa viesti virtauksesta

Käytä mapi_message::from_stream() Jotta jokaisesta std::istream Hyödyllistä varten käsittelemällä verkossa tai muistipuistosta saatuja MSG-tietoja:

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

Aina avaa virta std::ios::binary estää Windowsin linjan päättymisen Käännöksen mukaan CFB-kontinentti on pilaantunut.


Vaihe 5 – Iterate vastaanottajia

message.recipients() Takaisin A std::vector vastaanottavan kohteen, jokaisen kanssa display_name, email_address,ja recipient_type kentät :

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

Vaihe 6 – Iteraattivälitteiset liitteet

message.attachments() Takaisin a std::vector jokaisen kiinnityksen kohteen. Näyttelyitä filename, mime_type, data (Ryöjä on raakaa, content_id,Ja sen is_embedded_message() Saarnaa siis:

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

Yhteisiä ongelmia ja korjauksia

tyhjää body() Latauksen jälkeen. Jotkut viestit tallentavat tekstiä vain HTML-kehossa Kiinteistö - tarkista message.html_body() Kun message.body() Palauttaa tyhjän merkin.

Avoinna ilman std::ios::binary. Windowsissa tekstitilan virrat kääntävät CRLF-jaksot, jotka hiljaa pilata binary CFB dataa. Avaa aina MSG tiedostot std::ios::binary.

msg_exception Heitetään pätevän näyttävän tiedoston puolesta. Tarkista, että tiedosto on aito MSG Tiedostot, jotka on tallennettu joillakin vientivälineillä, voivat olla yksinkertaista tekstiä tai MIME- ja Ei voi olla eristetty mapi_message::from_file().

recipients() Palauttaa tyhjän vektorin. Vanhemmat MSG-tiedostot joskus ohittavat vastaanottajan Pöytä, mutta varasto näyttää vastaanottajia display_to MAPI ominaisuus. Pääsy sen kautta message.get_property_value() kanssa common_message_property_id::display_to ja property_type_code::ptyp_string.

Suuret tiedostot muistiin. - onmapi_message::from_file() ja from_stream() lataa koko viesti, mukaan lukien kaikki liitetiedostot. Suurille tiedostoille avaa Sisäänrakennettu kontti, jossa msg_reader Tarkista liitteen virtaukset ilman täyttä materialisoida niitä.

Usein kysyttyjä kysymyksiä

Mikä on ero välillä from_file() ja from_stream()?

Molemmat tuottavat samanlaisen mapi_message kohteen kanssa. from_file() Hyväksytään a std::filesystem::path Avaa tiedosto sisäisesti. from_stream() lukee tästä Kaikki std::istream - käytettävissä, kun MSG-tiedot ovat jo muistiin tai Saavuimme yli sokerin.

tekee from_file() Pidä tiedosto auki latauksen jälkeen.?

Tiedosto avataan, muistiin lisätään kokonaan ja suljetaan ennen kuin se on from_file() Voit siirtää tai poistaa lähdetiedoston heti puhelun jälkeen.

Voinko lukea MSG-tiedostoja, jotka on luotu Outlookissa macOS: ssä tai Linuxissa?

Kyllä. MSG-muoto (OLE Compound File + MAPI -ominaisuudet) on siirrettävissä eri puolilla maailmaa Käyttöjärjestelmä - Kaikki .msg Outlookin minkä tahansa version tuottama tiedosto voidaan avata kanssa mapi_message::from_file().

Miten luen HTML-kohdetta?

soittaminen message.html_body().Jos viesti on luotu vain yksinkertaisella tekstillä, Tämä palauttaa tyhjän merkin. message.body() Palauttaa kehon selkeään tekstiin.

Onko tiukka mode oletuksena?

mapi_message::from_file(path, strict) ja from_stream(stream, strict) Hyväksytään yksi Valinnainen strict Boolean. deflat on false, joka sietää vähäistä rakenteellista Reaalielämän MSG-tiedostojen poikkeamat.

Näe myös

 Suomi