Jak číst MSG soubory v C++

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.git
add_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.

Viz také

 Čeština