Hvordan man læser MSG filer i C++
Aspose.Email FOSS for C++ lets you open and parse Outlook MSG files with a single Funktion af opkald. mapi_message::from_file() og mapi_message::from_stream() Lad dig på fuldt budskab – emne, krop, sender, modtagere og tilbehør – ind i en hukommelse Objekt med ingen Outlook eller COM-afhængighed.
Trin 1 - Indstill projektet
Klon opbevaringsret og tilføje det til din 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)Trin 2 - Indtast headeret
#include "aspose/email/foss/msg/mapi_message.hpp"Denne enhed giver mapi_message Alle de støttende typer i aspose::email::foss::msg Navn på plads.
Trin 3 - Lade en besked fra en filvej
Brug af mapi_message::from_file() Når du har en 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';
}Trin 4 - Lade en besked fra et strøm
Brug af mapi_message::from_stream() For at afskære fra enhver std::istream - nyttigt for behandle MSG-data modtaget via et netværk eller fra en in-memory buffer:
#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';
}Altid åbne strømmen med std::ios::binary For at forhindre Windows line-end Oversættelse fra korruption af CFB-konteineren.
Trin 5 - Iterat-receptorer
message.recipients() Tilbage A std::vector af modtagere, hver med display_name, email_address,og recipient_type Fællesskaberne :
#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';
}
}Trin 6 - Iterate tilbehør
message.attachments() Tilbage A std::vector Hvert af de forskellige elementer. hver af disse Eksponeringer filename, mime_type, data (Han har fået de rå byte), content_id,Og den is_embedded_message() Forudsigelse af:
#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';
}
}Almindelige problemer og rettelser
tomme body() Efter opladning. Nogle meddelelser gemmer kun tekst i HTML-kroppen Ejendomsretten - Check message.html_body() Når message.body() Der returneres en tom linje.
Stream åbnet uden std::ios::binary. Windows oversætter tekst-mode strømme CRLF sekvenser, tyst korrupte binære CFB data. Altid åbne MSG filer med std::ios::binary.
msg_exception Gør en fil med et gyldigt udseende. Kontrollér filen er en ægte MSG (OLE Compound File). filer gemt af nogle eksportværktøjer kan være plain tekst eller MIME og kan ikke fordeles af mapi_message::from_file().
recipients() Der er en tom vektor tilbage. Forældre MSG-filer omgiver nogle gange modtageren tabeller, men store viser modtagere i display_to MAPI ejendom. adgang til det via message.get_property_value() Med common_message_property_id::display_to og property_type_code::ptyp_string.
Stort indhold i hukommelsen. Det ermapi_message::from_file() og from_stream() oplad hele meddelelsen, herunder alle vedhæftede byter. for store filer åbner du Kontejner med underliggende msg_reader og inspicere tilslutningsstrømme uden fuldt ud materialisere dem.
Ofte stillede spørgsmål
Hvad er forskellen mellem from_file() og from_stream()?
Begge producerer en identisk mapi_message Det objekter. from_file() accepterer A std::filesystem::path og åbner filen internalt. from_stream() Læs fra Enhver std::istream du giver – nyttigt, når MSG-data allerede er i hukommelse eller Kom over en sokke.
Det gør from_file() Hold filen åben efter opladning.?
Filen er åbnet, fuldt parsede i hukommelsen og lukket før from_file() Du kan flytte eller slette kildefilen umiddelbart efter opkaldet.
Kan jeg læse MSG-filer, der er skabt af Outlook på macOS eller Linux?
Ja. MSG-format (OLE Compound File + MAPI egenskaber) er overførbart i hele Operativsystemer - alle .msg filer, der er produceret af enhver version af Outlook kan åbnes Med mapi_message::from_file().
Hvordan læser jeg HTML-korn?
Kalling message.html_body().Hvis budskabet kun er skabt med en tekst-pline, Det giver en tom linje tilbage. message.body() Tilbage til den plain-text body.
Er det en standard, der er foreskrevet?
mapi_message::from_file(path, strict) og from_stream(stream, strict) accepterer en Optionelt strict B. Det er den forkert false,som kan tolerere mindre strukturelle afvigelser i virkelige MSG-filer.