Jak číst MSG soubory v C++
Aspose.Email FOSS for C++ lets you open and parse Outlook MSG files with a single Funkční volání . mapi_message::from_file() a mapi_message::from_stream() Přidat si úplné poselství – předmět, tělo, odesílatele, příjemce a příloh – do paměti Objekt bez závislosti na Outlook nebo COM.
Krok 1 - Zadejte projekt
Klonujte záložku a přidejte ji do svého 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)Krok 2 - Vložte název
#include "aspose/email/foss/msg/mapi_message.hpp"Tento jediný titulek poskytuje mapi_message a všechny podporující typy v aspose::email::foss::msg Jméno je.
Krok 3 - Stáhněte zprávu z souborového průchodu
Použití mapi_message::from_file() Když máte A 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';
}Krok 4 - Nahrávejte zprávu z toku
Použití mapi_message::from_stream() Zkuste se od kterékoliv std::istream - užitečné pro zpracování údajů MSG obdržených prostřednictvím sítě nebo z 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';
}Vždy otevřete proud s std::ios::binary Jak zabránit Windows line-end Překlad z korupce kontejneru CFB.
Krok 5 - Iterátové nádoby
message.recipients() Zpět na A std::vector Objekty, které jsou v každém display_name, email_address,a recipient_type v polích :
#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';
}
}Krok 6 – Iterate Attachments
message.attachments() Zpět na A std::vector Příloha: Každý příloh Expozice filename, mime_type, data (a to i v případě, že se jedná o, content_id,A to i s is_embedded_message() Předpovídá se:
#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';
}
}Časté problémy a opravy
prázdné body() Po nabití. Některé zprávy ukládají text pouze v těle HTML. Nájemní majetek - kontroly message.html_body() Kdy message.body() Vrací prázdnou řetěz.
Přívod se otevřel bez std::ios::binary. Windows překládá textové streamování CRLF sekvence, tiše zkreslování binární CFB data. vždy otevřít MSG soubory s std::ios::binary.
msg_exception Vyhodit pro platný vzhled souboru. Zkontrolujte, zda je soubor skutečný MSG Soubory uložené některými vývozními nástroji mohou být plochý text nebo MIME a Není možné se rozdělit na mapi_message::from_file().
recipients() Vracíme prázdný vektor. Starší MSG soubory někdy omezují příjemce tabulku, ale sklad zobrazuje příjemce v display_to MAPI vlastnictví. přístup k ní prostřednictvím message.get_property_value() s common_message_property_id::display_to a property_type_code::ptyp_string.
Velké přidělovací údaje v paměti. Vlastnímapi_message::from_file() a from_stream() nahrát celou zprávu včetně všech přiložek bajtů. pro velké soubory, otevřete Kontejnery s podkladem msg_reader a kontrolovat přilnavost proudů bez plného a materializovat je.
Často kladené otázky
Jaký je rozdíl mezi from_file() a from_stream()?
Obě vyvolávají identické mapi_message a objektů . from_file() Přijímá A std::filesystem::path Otevřete soubor vnitřně. from_stream() Čtení od Jakýkoli std::istream poskytnete – užitečné, pokud jsou údaje MSG již v paměti nebo Přicházím přes socket.
A to from_file() Udržujte soubor po načtení otevřen?
Soubor je otevřen, plně zaparzen do paměti a předtím zavřený. from_file() Můžete přesunout nebo odstranit zdrojový soubor ihned po volání.
Můžu číst soubory MSG vytvořené Outlook na macOS nebo Linux?
MSG (OLE Compound File + MAPI vlastnosti) je přenosný přes provozní systémy - jakýkoli .msg soubory vytvořené jakékoli verzí programu Outlook lze otevřít s mapi_message::from_file().
Jak čtu HTML tělo?
Volání message.html_body().Pokud je zpráva vytvořena pouze s plochým textovým tělem, To je návrat prázdné řetězce. message.body() Vrací se do textu plný.
Je standardní režim předem?
mapi_message::from_file(path, strict) a from_stream(stream, strict) Přijímám jeden Volitelné strict Boliáš: Vydání je false,které tolerují menší struktury Odchylky v souborech MSG reálného světa.