Čtení souborů MSG
Čtení souborů MSG
mapi_message je vstupní bod pro načtení a analýzu souborů Outlook MSG. Jediný Zavolej na: from_file() nebo: from_stream() čte celý CFB kontejner, extrahuje všechny MAPI vlastnosti, a vystavuje je pomocí typovaných přístupových metod žádná instalace programu Outlook je to nutné.
Naložení ze cesty souboru
Použití: mapi_message::from_file() s výjimkou: 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';
}Náklad z proudu
Použití: mapi_message::from_stream() při příjezdu dat MSG z síťového zásuvku, a archiv, nebo jakékoli jiné 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 otevřete proud s std::ios::binary. Textové toky překládání řádku Konečky na Windows a poškodit CFB kontejner.
Vlastnosti přístupu k zprávám
mapi_message odhaluje nejčastější vlastnosti zpráv jako jmenované 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é příjemce
message.recipients() vrací a std::vector Objekty příjemce 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é přílohy
message.attachments() vrací a std::vector Každá z nich odhaluje, že se objevily další důkazy. 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()));
}
}
}Přístup k vestavěným zprávám
Kdy? is_embedded_message() je: true, příloha obsahuje další soubor MSG. Přístup přes: 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 nejlepší postupy
- Vždycky projít.
std::ios::binaryna …std::ifstreampři načítání souborů s MSG. - Ček.
html_body()předchozíbody()Zprávy pouze s HTML ukládají svůj obsah v systému. HTML body vlastnost a odchodbody()prázdný. from_file()Pro velké soubory MSG zvažte: otevření podkladového obalu smsg_readerpro kontrolu metadát bez úplného materializace bajtů připojených.- Úřad pro bezpečnost a ochranu zdraví
strictparametry:from_file(path, strict)a)from_stream(stream, strict)Způsoby, které jsou v rozporu sfalse, které tolerují menší strukturální odchylky v reálných souborech MSG. - Objekty příjemce odhalí
recipient_typerozlišovat údaje To, Cc a Bcc.
Obvyklé problémy
| Výše: | Příčina: | Opravy |
|---|---|---|
msg_exception na platně vypadající soubor | Soubor není originální kontejner OLE CFB . | Ověřte se cfb_reader::from_file() pokud také hodí, soubor není platný MSG |
body() vrací prázdný řetěz | Zpráva používá pouze HTML tělo | Použití: html_body() místo toho … |
recipients() je prázdný. | Starší MSG bez tabulky příjemců | Přístup display_to přes: get_property_value() s: common_message_property_id::display_to |
| Zkažení přenosu na Windows | Proud otevřen bez: std::ios::binary | Přidání: std::ios::binary Vlajka na: std::ifstream |
| Vysoká spotřeba paměti pro velké soubory | Všechny údaje o přílohách jsou načteny předem. | Použití: msg_reader pro přístup na nízké úrovni bez plného zpracování |
FAQ
- Ano. from_file() - Nechat otevřené držadlo souboru?
Ne. Soubor je otevřen, zcela analyzován a uzavřený před návratem metody. Můžete přesunout nebo odstranit zdrojový soubor po volání.
Jak poznám, jestli je příloha soubor nebo vestavěný MSG?
Zavolej . attachment.is_embedded_message().- Vrátky . true pro vložené soubory MSG; false pro běžné soubory připojené. Pro vložené zprávy, přístup k vestavěnému objektu přes: attachment.embedded_message.
Jaký je rozdíl mezi from_file() a používání: msg_reader?
mapi_message::from_file() je high-level API analyzuje celou zprávu a odhalí vlastnosti jako typované pole. msg_reader je nízkonávěrný čteč, který dává přístup k surové konstrukci kontejneru CFB a je užitečný, když potřebujete zkontrolovat rozložení zprávy bez analýzy všech vlastností MAPI.
Jsou soubory Unicode a ANSI MSG podporovány?
- Ano, jsem.
mapi_messageObsahuje jak Unicode (typ vlastnostíptyp_string) a ANSI (ptyp_string8) vlastností řetězců.unicode_strings()výnosytruepro zprávy uložené s vlastnostmi Unicodu.
Souhrnná referenční informace API
| Třída / metoda | Popis: |
|---|---|
mapi_message::from_file(path) | Naložit soubor MSG z std::filesystem::path |
mapi_message::from_file(path, strict) | Náklad s možností přísného režimu |
mapi_message::from_stream(stream) | Náklad MSG z std::istream |
mapi_message::from_stream(stream, strict) | Náklad z proudu s volbou přísného režimu |
mapi_message::subject() | Vrátit řetězce předmětu zprávy . |
mapi_message::body() | Vrátit textový materiál |
mapi_message::html_body() | Zpětná položka (nejsou-li obsažena) |
mapi_message::sender_name() | Zpětný název odesílatele |
mapi_message::sender_email_address() | Zpětná adresa odesílatele . |
mapi_message::internet_message_id() | Vrátit název RFC 2822 ID zprávy |
mapi_message::message_class() | Vrátit řetěz třídy MAPI zprávy |
mapi_message::recipients() | Vrátit seznam příjemců |
mapi_message::attachments() | Vrátit seznam přidělených položek . |
mapi_attachment::is_embedded_message() | Pravda, pokud je připojený vestavěný MSG. |
mapi_message::unicode_strings() | Pravda , pokud zpráva používá vlastnosti řetězců Unicodu . |