Kako pretvoriti EML u MSG na C++

Kako pretvoriti EML u MSG na C++

Aspose.Email FOSS for C++ supports bidirectional conversion between EML (RFC 5322 / Uspjeh i sposobnost korištenja (u slučaju da se koristi) mapi_message::load_from_eml() Uvoziti jedan Zatim se datoteka, nakon mapi_message::save() da ga napiše kao MSG – i obratno s mapi_message::from_file() Slijedio je mapi_message::save_to_eml().

Korak 1 - Uspostavite projekt

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)

Korak 2 — Pretvorite EML u MSG (Put datoteke)

mapi_message::load_from_eml() Slučajno se upijaju i otkrivaju njezina svojstva kroz Standardni mapi_message Interfejs - poziv save() Da biste to učinili, ispisujte rezultat kao MSG:

#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';
    std::cout << "From:    " << message.sender_email_address() << '\n';

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

Korak 3 — Pretvoriti EML u MSG (Stream)

Koristite pretjerano opterećenje toka load_from_eml() kada podaci iz mreže dolaze iz EML čep, memorijski buffer ili drugi std::istream:

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

int main()
{
    std::ifstream eml_stream("message.eml", std::ios::binary);
    const auto message = aspose::email::foss::msg::mapi_message::load_from_eml(eml_stream);

    message.save(std::filesystem::path("converted.msg"));
}

Korak 4 — Pretvorite MSG u EML

Uložite postojeće datoteke s mapi_message::from_file(),Nakon toga se serializira na EML Formati s 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";
}

5. korak – Cijeli put (EML → MSG→ EML)

Sljedeći primjer pokazuje da su predmet, tijelo, pošiljatelj, primatelj i priloga sačuvani tijekom cijelog putovanja:

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

int main()
{
    const auto msg_path = std::filesystem::path("roundtrip.msg");
    const auto eml_out  = std::filesystem::path("roundtrip.eml");

    // EML → MSG
    auto message = aspose::email::foss::msg::mapi_message::load_from_eml(
        std::filesystem::path("original.eml"));
    message.save(msg_path);

    // MSG → EML
    auto reloaded = aspose::email::foss::msg::mapi_message::from_file(msg_path);
    reloaded.save_to_eml(eml_out);

    std::cout << "Subject preserved: " << reloaded.subject() << '\n';
    std::cout << "Attachments: " << reloaded.attachments().size() << '\n';
}

Korak 6 — Pretvoriti u EML bajti u memoriji

Obojica save() i save_to_eml() imaju nultog argumenta preopterećenja koje se vraćaju std::vector<std::uint8_t>, korisno za streaming rezultata na mrežnu vezu ili Pristup datoteci bez dodirivanja sustava datotek:

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

    // In-memory MSG bytes
    const auto msg_bytes = message.save();

    // In-memory EML bytes
    const auto eml_bytes = message.save_to_eml();
}

Zajednička pitanja i popravci

load_from_eml() Učinite to ispravno na primjeru datoteke. Provjerite korištenje datoteke RFC 5322 EML datoteke koje izvoze neki alati mogu koristiti GOLF LF. Očekuje se da će linije završiti u skladu sa standardima.

Nedostaju prijenosi nakon konverzije. Potvrdite da EML sadrži standardni MIME multipart/mixed ili multipart/related Slike s referencijskim dijelovima preko cid: Oni su u tijeku kao prijenosnici u MSG i trebaju biti prisutni.

HTML tijelo izgubljeno nakon MSG → EML. HTML sadržaj se čuva tijekom okruglog putovanja Kada message.html_body() Ne može biti prazno, ako je message.body() Naseljen je u Izvor MSG, EML će sadržavati samo dio jednostavnog teksta.

save_to_eml() Izlazni tok je prazan. Otvoreni izvodi struje s std::ios::binary.Streams u tekstovnom načinu rada narušavaju strukturu MIME na Windows-u.

Tema sadrži ?= Kodiranje artefakata. Ovo su RFC 2047 kodirane riječi sekvence U knjižnici se čuvaju kao-is. dekodiranje s RFC 2047 knjižnica Ako vam je potreban Unicode.

Često postavljana pitanja

Jesu li priloge sačuvane u oba smjera konverzije?

I za sve, i za one koji su u stanju da se bave tim problemom. mapi_message Binarne prijenose su predstavljene kao sirovi bajti u mapi_attachment::data.

Je li EML → MSG sačuvati HTML tijelo?

Ako je u sadržaju a text/html MIME dio, pohranjen je u HTML-ovome tijelu MAPI Imovina i vraćanje message.html_body() Nakon punjenja.

Mogu li pretvoriti katalog datoteka EML u serije?

Iterirajte direktorij s std::filesystem::directory_iterator i poziva mapi_message::load_from_eml() Svaki je .eml Put, a zatim spasiti s save():

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

int main()
{
    for (const auto& entry : std::filesystem::directory_iterator("emails/"))
    {
        if (entry.path().extension() == ".eml")
        {
            auto msg = aspose::email::foss::msg::mapi_message::load_from_eml(entry.path());
            auto out = entry.path();
            out.replace_extension(".msg");
            msg.save(out);
        }
    }
}

Što se čuva tijekom konverzije?

Subject, body-text, HTML body, ime i adresa pošiljatelja, popis primatelja i svi prilogi. MIME zastave, naslovi za usmjeravanje izvan osnovnih naslova prijevoza i TNEF kodirani podaci nisu sačuvani.

je load_from_eml() Traktorski sigurni?

Svaki poziv na load_from_eml() Stvoriti neovisnu mapi_message Upravni odbor. Možete ga nazvati iz više nitova istodobno, sve dok svaka nit koristi svoju vlastitu. Objekt poruke.

Također

 Hrvatski