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.gitadd_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.