Kako čitati MSG datoteke u C++
Aspose.Email FOSS for C++ lets you open and parse Outlook MSG files with a single Funkcijski poziv. mapi_message::from_file() i u članku 1. mapi_message::from_stream() punjenje Potpuno poruku predmet, tijelo, pošiljatelj, primaoci i prilozi ?? u memoriju objekt bez Outlook ili COM ovisnosti.
Korak 1 Uspostavljanje projekta
Klonirati repozitorij i dodati ga na svoj 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)Korak 2 Uključite naslov
#include "aspose/email/foss/msg/mapi_message.hpp"Ovaj jedini zaglavlje pruža: mapi_message i sve podupirne vrste u aspose::email::foss::msg prostor imena.
Korak 3 Uplatiti poruku s puta datoteke
Upotreba: mapi_message::from_file() kada imate: 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';
}Korak 4 Uplatiti poruku iz streama
Upotreba: mapi_message::from_stream() da se analizira iz bilo kojeg std::istream korisno za: U slučaju da je to moguće, provjeravanje podataka u okviru sustava za upravljanje s podacima iz članka 4. stavka 1. točke (a) ili od strane korisnika koji se koristima za obavljanje operacija.:
#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';
}Uvijek otvorite potok s: std::ios::binary Kako spriječiti Windows završetak redoslijeda Prevod iz pokvarenog CFB kontejnera.
Sljedeći članakSvijetlo:
message.recipients() vraća a std::vector od objekata primaoca, svaki s: display_name, email_address, i recipient_type polja:
#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';
}
}Korak 6 Iterirati prilozi
message.attachments() vraća a std::vector U tom slučaju, ne može se utvrditi da je to bilo moguće. izloženosti filename, mime_type, data (neizgrađeni bajtovi), content_id, i u skladu s člankom 73. stavkom 1. is_embedded_message() Predikat:
#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';
}
}Česta pitanja i rješenja
Prazno. body() nakon utovarenja. Neke poruke čuvaju samo tekst u tijelu HTML-a. Čekajte. message.html_body() kad je to bilo? message.body() vraća prazan niz.
Povijek otvoren bez: std::ios::binary. Na Windows, tekst-mode tokovi prevoditi CRLF sekvence, tiho pokvariti binarne CFB podatke. Uvijek otvorite MSG datoteke s std::ios::binary.
msg_exception Bačen za valjan izgled datoteke. Potvrdite da je datoteka originalna MSG (OLE Compound File). Datoteke koje čuvaju neke alate za izvoz mogu biti običan tekst ili MIME i ne može biti analizirana od strane: mapi_message::from_file().
recipients() vraća prazan vektor. Starije MSG datoteke ponekad izostavljaju primatelja Tabla ali pohraniti prijemnike prikaza u display_to Pristup je preko: message.get_property_value() s: common_message_property_id::display_to i u članku 1. property_type_code::ptyp_string.
Veliki prilog podataka u memoriji. Sljedeći članak:mapi_message::from_file() i u članku 1. from_stream() Za velike datoteke, otvorite podložni kontejner s: msg_reader i provjeravanje priključnih tokova bez potpuno materijalizira ih.
Česta pitanja
Koja je razlika između: from_file() i u članku 1. from_stream()?
Oba stvaraju identičan rezultat. mapi_message -Ne, ne mogu. from_file() prihvaćaju: std::filesystem::path i otvara datoteku iznutra. from_stream() čita iz: bilo koji std::istream dajte korisno kada su MSG podaci već u memoriji ili Dolaze preko priključka.
Da li je? from_file() da ostavim datoteku otvorenu nakon učitavanja?
Ne, datoteka je otvorena, u potpunosti analizirana u memoriju i zatvorena prije nego što se otvori. from_file() Možete pomaknuti ili izbrisati izvorni datoteku odmah nakon poziva.
Mogu li čitati MSG datoteke kreirane Outlookom na macOS-u ili Linuxu?
Da. MSG format (OLE Compound File + MAPI svojstva) je prenosiv preko svih stranica operativni sustavi. .msg datoteka koja je proizvedena bilo kojom verzijom programa Outlook može se otvoriti. s: mapi_message::from_file().
Kako čitam HTML?
Zovi me. message.html_body().Ako je poruka stvorena samo u obliku teksta, Ovo vraća prazan niz. message.body() vraća tijelo u običnom tekstu.
Je li strog način podrazumijevano?
mapi_message::from_file(path, strict) i u članku 1. from_stream(stream, strict) prihvatiti i opcionalno strict Po predviđenju je: false, koji podnosi manje strukturne povrede. Odstupanja u stvarnom svijetu MSG datoteke.