Čitanje MSG datoteka
Čitanje MSG datoteka
mapi_message je ulazna točka za učitavanje i analizu Outlook MSG datoteka. Jednostavna Zovi na… from_file() ili: from_stream() Čita cijeli CFB kontejner, izvlači sve MAPI svojstva, i izloži ih kroz tipirane pristupne metode nema Outlook instalaciju Potrebno je.
Opterećenje s puta datoteke
Upotreba: mapi_message::from_file() s: 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';
}Opterećenje iz toka
Upotreba: mapi_message::from_stream() Ako je to moguće, potrebno je provesti postupak za utvrđivanje: arhiva, ili bilo koji drugi 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';
}Uvijek otvorite potok s: std::ios::binary. Tekst-mode tokovi prevoditi liniju Završi na Windows i pokvariti CFB kontejner.
Priroda poruke za pristup
mapi_message izloži najčešće svojstva poruke kao imenovane gettere:
#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";
}Iznos od ukupne vrijednosti:
message.recipients() vraća a std::vector od objekata primatelja s: display_name, email_address, i 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';
}
}Iterirane prilozi
message.attachments() vraća a std::vector Svaki od njih otkriva filename, mime_type, data, content_id, i 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()));
}
}
}Pristup ugrađenim porukama
Kada? is_embedded_message() je: true, priloženo pismo sadrži još jednu datoteku MSG. Pristup preko: 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"));
}
}
}Savjeti i najbolje prakse
- Uvijek prolazi.
std::ios::binaryu iznosu od:std::ifstreamprilikom učitavanja MSG datoteka. - Čekaj.
html_body()prijebody()Poruke samo HTML-a čuvaju svoj sadržaj u HTML tijelo svojstva i ostavitibody()Prazna. from_file()Za velike MSG datoteke, uzmite u obzir: otvaranje podložne posude s:msg_readerza provjeru metapodataka bez potpunog materijaliziranje bajtova priloženja.- U skladu s člankom 1.
strictparametar za:from_file(path, strict)i u članku 1.from_stream(stream, strict)Neispunjavanje zahtjeva za:false, tolerira manju strukturnu odstupanost u stvarnim MSG datotekom. - Prijemnik objekata izložiti
recipient_typeza razlikovanje uputa To, Cc i Bcc.
Zajednički problemi
| Izdavanje | Uzrok | Popraviti |
|---|---|---|
msg_exception na valjanom datoteku | Datoteka nije originalni OLE CFB kontejner | Provjerite s: cfb_reader::from_file() ako je također baca, datoteka nije valjan MSG |
body() vraća prazan niz | Poruka koristi samo HTML tijelo | Upotreba: html_body() umjesto toga. |
recipients() je prazan. | Stariji MSG bez tabele primatelja | Prihvat display_to preko: get_property_value() s: common_message_property_id::display_to |
| Korupcija strima na Windows-u | Povijek otvoren bez: std::ios::binary | Dodavanje std::ios::binary Zastava na: std::ifstream |
| Visoka potrošnja memorije za velike datoteke | Svi podaci prilozi su naprijed učitavani. | Upotreba: msg_reader za pristup niskog razine bez pune realizacije |
FAQ
Da li je? from_file() - Da držim otvorenu ručku?
Ne. Datoteka se otvara, u potpunosti analizira i zatvara prije nego što metoda vrati. Možete pomaknuti ili izbrisati izvornu datoteku nakon poziva.
Kako da kažem je li priložena datoteka ili ugrađena MSG?
Zovi me. attachment.is_embedded_message().-Povratak true za ugrađene datoteke MSG-a; false za redovne priložene datoteke. Za ugrađene poruke, pristupite zaglavljenom objektu preko: attachment.embedded_message.
Koja je razlika između: from_file() i korištenje msg_reader?
mapi_message::from_file() je API visokog razine on analizira cijelu poruku i izloži svojstva kao tipirana polja. msg_reader je niskorazredni čitatelj koji daje pristup sirovoj CFB kontejnerskoj strukturi i korisno je kada trebate provjeriti raspored poruke bez analizira sve MAPI svojstva.
Podržavaju li se Unicode i ANSI MSG datoteke?
-Da, u redu je. mapi_message Obratite se na Unicode (vrsta svojstva) ptyp_string) i ANSI-a. (ptyp_string8) svojstva nizova. unicode_strings() povratni podaci true za poruke pohranjeno s Unicode svojstvima.
Svrha referentnog API-a
| Klasa / metoda | Opisivanje |
|---|---|
mapi_message::from_file(path) | Uplatiti MSG datoteku iz std::filesystem::path |
mapi_message::from_file(path, strict) | Opcija za opterećenje u strogom režimu |
mapi_message::from_stream(stream) | Opterećenje MSG-om od std::istream |
mapi_message::from_stream(stream, strict) | Opcija za strogo načinu opterećenja iz toka |
mapi_message::subject() | Vrati niz predmeta poruke |
mapi_message::body() | Vrati tijelo teksta u pravoj formi |
mapi_message::html_body() | Vratiti HTML tijelo (prazno ako nije prisutno) |
mapi_message::sender_name() | Vrati ime poslalaca za prikaz |
mapi_message::sender_email_address() | Vrati e-mail adresu pošiljatelja |
mapi_message::internet_message_id() | Vrati zaglavlje RFC 2822 za ID poruku |
mapi_message::message_class() | Vrati MAPI poruku klasni niz |
mapi_message::recipients() | Vrati popis primatelja |
mapi_message::attachments() | Vrati popis priloga |
mapi_attachment::is_embedded_message() | U slučaju da je ulagano MSG, to jest: |
mapi_message::unicode_strings() | Istina ako poruka koristi Unicode string svojstva |