Čitanje MSG datoteka

Čitanje MSG datoteka

mapi_message je ulazna točka za učitavanje i analizu Outlook MSG datoteka. Jednostavna Zovi na… from_file() ili: from_stream() Čita cijeli CFB kontejner, izvlači sve MAPI svojstva, i izloži ih kroz tipirane pristupne metode nema Outlook instalaciju Potrebno je.


Opterećenje s puta datoteke

Upotreba: mapi_message::from_file() s: 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';
}

Opterećenje iz toka

Upotreba: mapi_message::from_stream() Ako je to moguće, potrebno je provesti postupak za utvrđivanje: arhiva, ili bilo koji drugi std::istream:

#include <fstream>
#include <iostream>
#include "aspose/email/foss/msg/mapi_message.hpp"

int main()
{
    std::ifstream input("sample.msg", std::ios::binary);
    const auto message = aspose::email::foss::msg::mapi_message::from_stream(input);

    std::cout << "Subject: " << message.subject() << '\n';
}

Uvijek otvorite potok s: std::ios::binary. Tekst-mode tokovi prevoditi liniju Završi na Windows i pokvariti CFB kontejner.


Priroda poruke za pristup

mapi_message izloži najčešće svojstva poruke kao imenovane gettere:

#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"));

    // Core properties
    std::cout << "Subject:          " << message.subject() << '\n';
    std::cout << "Sender name:      " << message.sender_name() << '\n';
    std::cout << "Sender email:     " << message.sender_email_address() << '\n';
    std::cout << "Internet msg-id:  " << message.internet_message_id() << '\n';
    std::cout << "Message class:    " << message.message_class() << '\n';

    // Body — check html_body() first; fall back to plain body()
    const auto& body = message.html_body().empty()
        ? message.body()
        : message.html_body();
    std::cout << "Body length: " << body.size() << " chars\n";
}

Iznos od ukupne vrijednosti:

message.recipients() vraća a std::vector od objekata primatelja s: display_name, email_address, i recipient_type:

#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"));

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

Iterirane prilozi

message.attachments() vraća a std::vector Svaki od njih otkriva filename, mime_type, data, content_id, i is_embedded_message():

#include <filesystem>
#include <fstream>
#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"));

    for (const auto& a : message.attachments())
    {
        std::cout << a.filename
                  << "  " << a.mime_type
                  << "  " << a.data.size() << " bytes"
                  << "  embedded=" << (a.is_embedded_message() ? "yes" : "no")
                  << '\n';

        if (!a.is_embedded_message())
        {
            std::ofstream out("extracted_" + a.filename, std::ios::binary);
            out.write(reinterpret_cast<const char*>(a.data.data()),
                      static_cast<std::streamsize>(a.data.size()));
        }
    }
}

Pristup ugrađenim porukama

Kada? is_embedded_message() je: true, priloženo pismo sadrži još jednu datoteku MSG. Pristup preko: attachment.embedded_message:

#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"));

    for (const auto& a : message.attachments())
    {
        if (a.is_embedded_message() && a.embedded_message != nullptr)
        {
            const auto& inner = *a.embedded_message;
            std::cout << "Embedded subject: " << inner.subject() << '\n';
            inner.save(std::filesystem::path("embedded.msg"));
        }
    }
}

Savjeti i najbolje prakse

  • Uvijek prolazi. std::ios::binary u iznosu od: std::ifstream prilikom učitavanja MSG datoteka.
  • Čekaj. html_body() prije body() Poruke samo HTML-a čuvaju svoj sadržaj u HTML tijelo svojstva i ostaviti body() Prazna.
  • from_file() Za velike MSG datoteke, uzmite u obzir: otvaranje podložne posude s: msg_reader za provjeru metapodataka bez potpunog materijaliziranje bajtova priloženja.
  • U skladu s člankom 1. strict parametar za: from_file(path, strict) i u članku 1. from_stream(stream, strict) Neispunjavanje zahtjeva za: false, tolerira manju strukturnu odstupanost u stvarnim MSG datotekom.
  • Prijemnik objekata izložiti recipient_type za razlikovanje uputa To, Cc i Bcc.

Zajednički problemi

IzdavanjeUzrokPopraviti
msg_exception na valjanom datotekuDatoteka nije originalni OLE CFB kontejnerProvjerite s: cfb_reader::from_file() ako je također baca, datoteka nije valjan MSG
body() vraća prazan nizPoruka koristi samo HTML tijeloUpotreba: html_body() umjesto toga.
recipients() je prazan.Stariji MSG bez tabele primateljaPrihvat display_to preko: get_property_value() s: common_message_property_id::display_to
Korupcija strima na Windows-uPovijek otvoren bez: std::ios::binaryDodavanje std::ios::binary Zastava na: std::ifstream
Visoka potrošnja memorije za velike datotekeSvi podaci prilozi su naprijed učitavani.Upotreba: msg_reader za pristup niskog razine bez pune realizacije

FAQ

Da li je? from_file() - Da držim otvorenu ručku?

Ne. Datoteka se otvara, u potpunosti analizira i zatvara prije nego što metoda vrati. Možete pomaknuti ili izbrisati izvornu datoteku nakon poziva.

Kako da kažem je li priložena datoteka ili ugrađena MSG?

Zovi me. attachment.is_embedded_message().-Povratak true za ugrađene datoteke MSG-a; false za redovne priložene datoteke. Za ugrađene poruke, pristupite zaglavljenom objektu preko: attachment.embedded_message.

Koja je razlika između: from_file() i korištenje msg_reader?

mapi_message::from_file() je API visokog razine on analizira cijelu poruku i izloži svojstva kao tipirana polja. msg_reader je niskorazredni čitatelj koji daje pristup sirovoj CFB kontejnerskoj strukturi i korisno je kada trebate provjeriti raspored poruke bez analizira sve MAPI svojstva.

Podržavaju li se Unicode i ANSI MSG datoteke?

-Da, u redu je. mapi_message Obratite se na Unicode (vrsta svojstva) ptyp_string) i ANSI-a. (ptyp_string8) svojstva nizova. unicode_strings() povratni podaci true za poruke pohranjeno s Unicode svojstvima.


Svrha referentnog API-a

Klasa / metodaOpisivanje
mapi_message::from_file(path)Uplatiti MSG datoteku iz std::filesystem::path
mapi_message::from_file(path, strict)Opcija za opterećenje u strogom režimu
mapi_message::from_stream(stream)Opterećenje MSG-om od std::istream
mapi_message::from_stream(stream, strict)Opcija za strogo načinu opterećenja iz toka
mapi_message::subject()Vrati niz predmeta poruke
mapi_message::body()Vrati tijelo teksta u pravoj formi
mapi_message::html_body()Vratiti HTML tijelo (prazno ako nije prisutno)
mapi_message::sender_name()Vrati ime poslalaca za prikaz
mapi_message::sender_email_address()Vrati e-mail adresu pošiljatelja
mapi_message::internet_message_id()Vrati zaglavlje RFC 2822 za ID poruku
mapi_message::message_class()Vrati MAPI poruku klasni niz
mapi_message::recipients()Vrati popis primatelja
mapi_message::attachments()Vrati popis priloga
mapi_attachment::is_embedded_message()U slučaju da je ulagano MSG, to jest:
mapi_message::unicode_strings()Istina ako poruka koristi Unicode string svojstva
 Hrvatski