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::binarya …std::ifstreamaz MSG-fájlok betöltésekor. - A csekk.
html_body()előzőlegbody()A csak HTML üzenetek tartalmát a weboldalon tárolják. HTML test tulajdonság és hagynibody()üres. from_file()A nagy MSG fájlok esetében a következőket kell figyelembe venni: a alatti tartály megnyitása,msg_readera metaadatok teljes körű ellenőrzése nélkül. a csatolt byte-k materializálása.- A Bizottság
strictparaméter afrom_file(path, strict)és a következők:from_stream(stream, strict)a nem teljesítésre vonatkozó kötelezettségekfalse, amely a valós MSG-fájlokban kisebb szerkezeti eltéréseket tolerál. - A címzett objektumok kimutatása
recipient_typea To, Cc és Bcc bejegyzések megkülönböztetése.
Általános kérdések
| A kérdés | Okok | Megjaví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ül | Hozzá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ás | A folyó nyitva van std::ios::binary | Hozzáadás std::ios::binary zászló std::ifstream |
| Nagy memóriafelhasználás a nagy fájlokhoz | Az ö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_messagea 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ányoktrueüzenetek esetében Unicode tulajdonságokkal tárolt.
API-referencia összefoglaló
| Rendszer / módszer | Leí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 |