Čítanie súborov MSG
Čítanie súborov MSG
mapi_message je vstupný bod pre načítanie a analýzu súborov Outlook MSG. Jediný Zavolajte na: from_file() alebo: from_stream() číta celý CFB kontajner, extrahuje všetky MAPI vlastnosti, a vystavuje ich prostredníctvom typovaných prístupových metód žiadna inštalácia Outlook je potrebné.
Naloženie z cesty súboru
Použitie: mapi_message::from_file() s dĺžkou: 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';
}Zaťaženie z prúdu
Použitie: mapi_message::from_stream() pri príchode údajov MSG z sieťového zásuvky, a archív alebo akýkoľvek iný archiv, ktorý je v súlade s článkom 3 ods. 1 písm. a) až c). 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';
}Vždy otvorte prúd s std::ios::binary.Textové prúdy prekladajú riadok . Koncovky na Windows a poškodil CFB kontajner.
Vlastnosti správy Access
mapi_message odhaľuje najbežnejšie vlastnosti správ ako pomenované gettery:
#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";
}Iterované príjemcovia
message.recipients() vráti a std::vector Objekty príjemcov s: display_name, email_address,a) 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';
}
}Iterované prílohy
message.attachments() vráti a std::vector Každý z nich odhaľuje, že sa na ňom nachádzajú rôzne objekty. filename, mime_type, data, content_id,a) 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()));
}
}
}Prístup k vloženým správam
Kedy? is_embedded_message() je: true, príloha obsahuje ďalší súbor MSG. Prístup cez: 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"));
}
}
}Tipy a najlepšie postupy
- Vždy prejdite.
std::ios::binaryna:std::ifstreampri načítaní súborov MSG. - Prehľad
html_body()predtýmbody()Správy iba s HTML ukladajú svoj obsah v systéme HTML vlastnosť tela a nechaťbody()prázdny. from_file()Pre veľké súbory MSG, zvážte: otvorenie podkladového kontajnera smsg_readerprezerať metadata bez úplného materializácia bajtov pripojenia.- Úrad pre bezpečnosť a ochranu zdravia
strictparametrefrom_file(path, strict)a)from_stream(stream, strict)zlyhanie nafalse, ktoré tolerujú menšie štrukturálne odchýlky v reálnych súboroch MSG. - Objekty príjemcu odhaľujú:
recipient_typerozlišovať položky To, Cc a Bcc.
Spoločné problémy
| Výstava | Príčina: | Oprava |
|---|---|---|
msg_exception na platnom súbore, ktorý vyzerá ako správny. | Súbor nie je originálny kontajner OLE CFB . | Overte s: cfb_reader::from_file() ak tiež hodí, súbor nie je platný MSG |
body() vráti prázdny reťazček | Správa používa iba HTML telo . | Použitie: html_body() namiesto toho |
recipients() je prázdny. | Starší MSG bez tabuľky príjemcov | Prístup display_to cez: get_property_value() s: common_message_property_id::display_to |
| Zhoršenie vysielania v systéme Windows | Prúd otvorený bez: std::ios::binary | Pridať std::ios::binary Vlajka na: std::ifstream |
| Vysoká spotreba pamäte pre veľké súbory | Všetky údaje o pripojení sú načítané vopred. | Použitie: msg_reader pre prístup na nízkej úrovni bez úplného zistenia, |
FAQ
Je to tak ? from_file() nechať otvorený rukoväť na súbory?
Nie. Súbor sa otvára, úplne analyzuje a zatvára pred návratom metódy. Môžete presunúť alebo odstrániť zdrojový súbor po volaní.
Ako môžem zistiť, či je príloha súbor alebo vložený MSG?
Zavolajte . attachment.is_embedded_message().- Vrátenie true pre vložené súbory MSG; false pre bežné prílohové súbory. Pre vložené správy, prístup k vkladanej objekty cez: attachment.embedded_message.
Aký je rozdiel medzi: from_file() a používanie: msg_reader?
mapi_message::from_file() je high-level API analyzuje celú správu a odhaľuje vlastnosti ako typované polia. msg_reader je nízkonúrovňový čítač, ktorý dáva prístup k surovej konštrukcii kontajnera CFB a je užitočný, keď potrebujete skontrolovať rozloženie správy bez analýzy všetkých vlastností MAPI.
Sú podporované súbory Unicode a ANSI MSG?
- Áno, áno.
mapi_messagespracováva Unicode (typ vlastností)ptyp_string) a ANSI (ptyp_string8) vlastnosti reťazca.unicode_strings()výnosytruepre správy uložené s vlastnosťami Unicodu.
Zhrnutie referenčného API
| Trieda / metóda | Opis: |
|---|---|
mapi_message::from_file(path) | Nahradenie súboru MSG z std::filesystem::path |
mapi_message::from_file(path, strict) | Zaťaženie s možnosťou prísneho režimu |
mapi_message::from_stream(stream) | Zaťaženie MSG z std::istream |
mapi_message::from_stream(stream, strict) | Zaťaženie z prúdu s možnosťou prísneho režimu |
mapi_message::subject() | Vrátiť reťazca predmetu správy . |
mapi_message::body() | Vrátiť telo v normálnom texte |
mapi_message::html_body() | Vrátiť telo HTML (prázdne, ak nie je prítomné) |
mapi_message::sender_name() | Vrátiť zobrazenie mena odosielateľa |
mapi_message::sender_email_address() | Vrátiť e-mailovú adresu odosielateľa |
mapi_message::internet_message_id() | Vrátiť náčelník RFC 2822 ID správy |
mapi_message::message_class() | Vrátiť reťaz MAPI správy triedy |
mapi_message::recipients() | Vrátiť zoznam príjemcov . |
mapi_message::attachments() | Vrátiť zoznam pripojených dokumentov . |
mapi_attachment::is_embedded_message() | Pravda, ak je pripojenie vložené MSG. |
mapi_message::unicode_strings() | Pravda , ak správa používa vlastnosti reťazca Unicode . |