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