Preobrazba EML-a i MSG-ova

Preobrazba EML-a i MSG-ova

Aspose.Email FOSS for C++ converts bidirectionally between EML (RFC 5322 / MIME) i u članku 1. MSG (Outlook MAPI) formati koristeći mapi_message.Put konverzije je: load_from_eml() → u memoriji mapi_messagesave() za EML→MSG, i from_file() / from_stream()save_to_eml() za MSG→EML.


Preobraziti EML u MSG

Uplatiti EML datoteku s: mapi_message::load_from_eml(), zatim serijalizirati na MSG s save():

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

int main()
{
    const auto message = aspose::email::foss::msg::mapi_message::load_from_eml(
        std::filesystem::path("message.eml"));

    std::cout << "Subject: " << message.subject() << '\n';
    message.save(std::filesystem::path("converted.msg"));
    std::cout << "Saved converted.msg\n";
}

load_from_eml() analizira MIME strukturu i popunjuje predmet MAPI, običan tekst tijelo, HTML telo, identitet pošiljatelja, popis primatelja i svi dijelovi priloga.


Preobraziti MSG u EML

Uplatiti MSG datoteku s: mapi_message::from_file(), onda nazovi save_to_eml():

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

    message.save_to_eml(std::filesystem::path("exported.eml"));
    std::cout << "Saved exported.eml\n";
}

Preobrazba na temelju toka

Sve četiri odgovarajuće metode prihvaćaju: std::istream / std::ostream pretrgavanja za: “Službeni sustav” znači:

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

int main()
{
    // EML → MSG via streams
    std::ifstream eml_in("message.eml", std::ios::binary);
    const auto message = aspose::email::foss::msg::mapi_message::load_from_eml(eml_in);

    std::ofstream msg_out("converted.msg", std::ios::binary);
    message.save(msg_out);

    // MSG → EML via streams
    std::ifstream msg_in("converted.msg", std::ios::binary);
    const auto reloaded = aspose::email::foss::msg::mapi_message::from_stream(msg_in);

    std::ofstream eml_out("roundtrip.eml", std::ios::binary);
    reloaded.save_to_eml(eml_out);
}

Uvijek otvoreni tokovi s std::ios::binary. Tekst-mode tokovi prevoditi završetke redova na Windows, pokvariti binarne CFB podatke.


Uloženo u sustav za upravljanje i održavanje podataka.

save() i u članku 1. save_to_eml() i imaju nulu argument preopterećenja vraćaju std::vector<std::uint8_t>.Koristite ih da biste izbjegli sve unose i izlaze datoteke:

#include <filesystem>
#include <vector>
#include "aspose/email/foss/msg/mapi_message.hpp"

int main()
{
    const auto message = aspose::email::foss::msg::mapi_message::load_from_eml(
        std::filesystem::path("message.eml"));

    const std::vector<std::uint8_t> msg_bytes  = message.save();
    const std::vector<std::uint8_t> eml_bytes  = message.save_to_eml();

    // Write to a database, network socket, or other destination...
}

Konverzija serijskog direktorija

Iterirati direktorij s: std::filesystem::directory_iterator preobraziti sve .eml datoteke u jednom prolazu:

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

int main()
{
    const std::filesystem::path input_dir("emails/eml");
    const std::filesystem::path output_dir("emails/msg");
    std::filesystem::create_directories(output_dir);

    for (const auto& entry : std::filesystem::directory_iterator(input_dir))
    {
        if (entry.path().extension() != ".eml")
            continue;

        const auto message = aspose::email::foss::msg::mapi_message::load_from_eml(
            entry.path());

        auto out_path = output_dir / entry.path().filename();
        out_path.replace_extension(".msg");
        message.save(out_path);

        std::cout << "Converted: " << entry.path().filename() << '\n';
    }
}

Savjeti i najbolje prakse

  • Otvoriti sve datoteke s: std::ios::binary i ulazni i izlazni.
  • Prefer load_from_eml(path) preko tok preopterećenja kada imate put; put Preopterećenje upravlja otvaranjem datoteke unutar i je malo jednostavnije.
  • Koristite preopterećenja bajtova (save() i u članku 1. save_to_eml() (bez args) prilikom provjeravanja podataka kroz cijevi između usluga kako bi se izbjegli privremeni dosje.
  • Predmet, tijelo, HTML telo, šaljač, primaoci i MIME prilozi su sve sačuvani kroz potpuni povratni put.
  • U ovom slučaju, ako je to moguće, podnositelj zahtjeva može zatražiti od strane nadležnog tijela da se u skladu s člankom 13. stavku 1. točke (a) Uredbe (EU) br. 1071/2013 provede postupak preusmjeravanja podataka na IMAP-u ili na internetskoj mreži za pretvaranje informacija o tome kako su oni povezani sa njima.

Zajednički problemi

IzdavanjeUzrokPopraviti
load_from_eml Baci na valjanom datotekuU ovom slučaju, u skladu s člankom 16. stavkom 1. točkom (a) i podstavkom 7.Zajamčite da EML koristi RFC 5322 CRLF; neki izvozni alati pišu prazan LF
Nepostojeće priloge nakon EML → MSGNestandardno kodiranje MIME prilogaProvjeriti primjenu EML-a multipart/mixed s standardnim Content-Disposition: attachment
Prazno HTML tijelo nakon MSG → EMLIzvor MSG ima samo tekst u jednostavnom obliku.Čekaj. message.html_body(); ako je prazna, pohranjen je samo običan tekst
Izlaz struje je pokvaren.Promet otvoren u tekstualnom režimuUvijek koristiti: std::ios::binary
Predmet prikazuje ?= sekvenceRFC 2047 kodirana riječ u izvornom EML-uDecodificirati s RFC 2047. knjižnice; knjižica čuva kodiran oblik

FAQ

Da li EML → MSG čuva HTML tijelo?

Da, A. text/html MIME dio je pohranjen u svojstvu tijela HTML-a i pristupačan je. preko: message.html_body() nakon utovarenja.

Da li se veza čuva u oba smjera?

Da. Svi dijelovi MIME priključka su provedeni kroz mapi_message popis priloga. Podaci o binarnim prilozima dostupni su kao: attachment.data (a) std::vector<std::uint8_t>).

Mogu li konvertirati jedan EML na više izlaznih formata istovremeno?

-Da, napunite EML jednom sa… load_from_eml(), onda pozovi oboje. save() i u članku 1. save_to_eml() na istom memoriji mapi_message -Ne, ne mogu.

-Da, to je… load_from_eml() Bezbedno?

Svaki poziv stvara nezavisnu mapi_message Više tema može nazvati: load_from_eml() U tom slučaju, podnositelj zahtjeva može na temelju članka 4. stavka 1. točke (a) staviti sljedeće uvjete:.

Što se događa s porukama bez teksta?

Ako EML sadrži samo: text/html dio, message.body() vraća prazan niz. i u članku 1. message.html_body() Oba su sačuvana kroz MSG. serijalizacija.


Svrha referentnog API-a

Klasa / metodaOpisivanje
mapi_message::load_from_eml(path)Proučiti EML datoteku u mapi_message
mapi_message::load_from_eml(stream)Proučiti EML iz std::istream
mapi_message::save(path)Serijaliziranje mapi_message na MSG datoteku
mapi_message::save(stream)Napisati MSG bajtova na std::ostream
mapi_message::save()U skladu s člankom 21. stavkom 1. std::vector<std::uint8_t>
mapi_message::from_file(path)Uplatiti MSG datoteku u mapi_message
mapi_message::from_stream(stream)Opterećenje MSG-om od std::istream
mapi_message::save_to_eml(path)Napisati EML na putanje datoteke
mapi_message::save_to_eml(stream)Napisati EML bajtova na std::ostream
mapi_message::save_to_eml()Iznos: std::vector<std::uint8_t>
 Hrvatski