Com llegir els arxius MSG en C++

Com llegir els arxius MSG en C++

Aspose.Email FOSS for C++ lets you open and parse Outlook MSG files with a single Funció de trucada. mapi_message::from_file() i mapi_message::from_stream() càrrega el missatge complet —subject, cos, enviador, destinatari i annexos— en una memòria Object amb no dependència d’Outlook o COM.

Pas 1 - Creació del projecte

Clona el repositori i afegeix-lo al teu 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)

Pas 2 - Incloure el capçalera

#include "aspose/email/foss/msg/mapi_message.hpp"

Aquest únic encàrrec proporciona mapi_message Tots els tipus de suport a la aspose::email::foss::msg Nom de la ciutat.


Pas 3 - Carregar un missatge d’una ruta de fitxers

Utilitzar mapi_message::from_file() Quan tens una 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';
}

Pas 4 - Carregar un missatge d’un corrent

Utilitzar mapi_message::from_stream() Per descomptar de qualsevol std::istream - Utilitzats per a processar dades MSG rebudes a través d’una xarxa o d’un buffer de memòria:

#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';
}

Sempre obrir el corrent amb std::ios::binary Per evitar el finalitzar Windows Traducció de la corrupció del contenidor CFB.


Pas 5 - Recipients de iterat

message.recipients() Torna a std::vector de les persones que es troben, cadascuna amb display_name, email_address,i recipient_type Els camps:

#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';
    }
}

Pas 6 - Iterat de l’atracció

message.attachments() Torna a std::vector de l’actitud. cada acció Exposició filename, mime_type, data (Els bits greus són els que, content_id,I el is_embedded_message() Predicant el:

#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';
    }
}

Problemes comuns i solucions

Vàstic body() Després de la càrrega. Alguns missatges emmagatzemen text només en el cos HTML Propietat de la propietat. comprovació message.html_body() Quan message.body() Torna una línia buida.

El corrent s’obre sense std::ios::binary. A Windows, els fluxos de text-mode tradueixen CRLF seqüències, silenciosament corrupt dades binàries CFB. Sempre obrir els arxius MSG amb std::ios::binary.

msg_exception Es va llançar per un fitxer de visió valid. Verificar que el fitxer és un MSG autèntic Els arxius guardats per algunes eines d’exportació poden ser text pla o MIME i No es pot fer parcel·lar per mapi_message::from_file().

recipients() Es torna un vector buit. Els arxius MSG més grans de vegades omet el destinatari la taula, però alberg de les mostres dels destinataris en el display_to MAPI propietat. accés a través de message.get_property_value() amb common_message_property_id::display_to i property_type_code::ptyp_string.

Gran adjunt de dades en memòria. El seumapi_message::from_file() i from_stream() carregar tota la comunicació inclòs tots els bit d’adhesió. per a arxius grans, obrir el Contingut amb el msg_reader i inspeccionar els fluxos d’adhesió sense ser completament Materialitzar els seus.

Preguntes freqüents

Quina és la diferència entre from_file() i from_stream()?

Ambdues genera un mateix mapi_message El objecte. from_file() Accepta el A std::filesystem::path Obre el fitxer internament. from_stream() Llegir de Qualsevol std::istream que proporciona, utilitzant quan les dades MSG ja estan en memòria o Arribant sobre una cistella.

que fa from_file() Mantenir el fitxer obert després de la càrrega?

No. El fitxer s’obre, es parseta completament en la memòria i tanca abans de from_file() Podeu moure o eliminar el fitxer font immediatament després de la trucada.

Puc llegir els arxius MSG creats per Outlook en macOS o Linux?

El format MSG (OLE Compound File + MAPI) és portable a través de la xarxa. Sistema operatiu: qualsevol .msg Es pot obrir qualsevol fitxer produït per qualsevol versió d’Outlook. amb mapi_message::from_file().

Com es pot llegir el cos HTML?

trucades message.html_body().Si el missatge es va crear amb només un cos de text pla, Això torna una línia buida. message.body() Retorn al cos de text pla.

És el mode estricte la default?

mapi_message::from_file(path, strict) i from_stream(stream, strict) Acceptació a Opcional strict La debilitat és la false,que es pot tolerar estructuralment menor. Desviacions en els arxius MSG del món real.

Vegeu també

 Català