Hogyan lehet átalakítani EML MSG C++

Hogyan lehet átalakítani EML MSG C++

Aspose.Email FOSS for C++ supports bidirectional conversion between EML (RFC 5322 / MIME) és MSG (Outlook MAPI) formátumok. használja a mapi_message::load_from_eml() importáljon egy EML fájl, majd mapi_message::save() írni, mint MSG - és fordítva a mapi_message::from_file() Követve a mapi_message::save_to_eml().

1. lépés - A projekt beállítása

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)

Lépés 2 — Konvertálni EML MSG (File Path)

mapi_message::load_from_eml() elemzi az EML fájlt, és feltárja annak tulajdonságait a A szabvány mapi_message Interfész - hívás save() Az eredményt MSG-ként írjuk le:

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

Lépés 3 — Konvertálni EML MSG (Stream)

Használja a túlterhelés áramlását load_from_eml() Amikor az EML adatokat egy hálózatból származik memóriabútor, vagy más 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"));
}

4. lépés — Konvertálj MSG EML

A meglévő MSG fájl betöltése a mapi_message::from_file(), majd serializál EML Formátumok a 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";
}

Lépés 5 – teljes körű utazás (EML → MSG → EML)

Az alábbi példa azt mutatja, hogy a téma, test, küldő, vevő és melléklet egy teljes körű utazáson keresztül megmarad:

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

Lépés 6 — Konvertálni EML Bytes Memória

Mindkettő save() és save_to_eml() A nullás túlterhelés, amely visszatér std::vector<std::uint8_t>, amely hasznos a hálózati kapcsolathoz való eredmények streamingjére, vagy A fájlrendszer érintése nélkül:

#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();
}

Közös problémák és fixok

load_from_eml() dob egy érvényes-néző EML fájl. A fájl ellenőrzése RFC 5322-t használ CRLF sor véget ér. EML fájlok exportálva néhány eszköz használhatja meztelen LF. A könyvtár A végső soron a szabványoknak megfelelő vonal.

Hiányzó mellékletek után EML → MSG átalakítás. Megerősítse, hogy az EML tartalmazza a szabványt MIME multipart/mixed vagy multipart/related A képek a linken.Inline images referenced útján cid: A szövetek az MSG-ben vannak, és jelen kell lenniük.

HTML test elvesztette után MSG → EML. A HTML tartalmak a körút során megmaradnak. Mikor message.html_body() Nem lehetetlen, ha csak message.body() A lakosság a forrás MSG, az EML csak egy egyszerű szöveg részét tartalmazza.

save_to_eml() A stream kimenete üres. A nyílt forgalmat a std::ios::binary.A szövegmód-áramok megrontják a Windows MIME szerkezetét.

Tárgy Tartalomjegyzék ?= A műanyag kódolása. RFC 2047 kódolt szótartományok Az eredeti EML. A könyvtár megőrzi őket, mint-is. Decode egy RFC 2047 könyvtári Ha egy egyszerű Unicode-t kell használni.

Gyakran ismételt kérdések

A mellékletek mindkét konverziós irányban megmaradnak?

EML → MSG és MS G → EM L átalakítások hordozza az összes MIME mellékleteket a mapi_message A bináris mellékleteket nyers bajtokként képviselik a mapi_attachment::data.

Az EML → MSG megőrzi a HTML testet?

Ha az EML tartalmaz egy text/html MIME rész, a MAPI HTML testben tárolódik tulajdonát, és visszaküldte a message.html_body() A rakodás után.

Lehet-e átalakítani egy mappát EML fájlokat?

Igen. Iterálja a címkét a std::filesystem::directory_iterator és hívás mapi_message::load_from_eml() Minden egyes .eml út, majd mentse meg a 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);
        }
    }
}

Mi marad fenn EML ↔ MSG átalakítás során?

Tárgy, egyszerű szövegtest, HTML test, küldő név és e-mail cím, fogadó listák és minden MIME melléklet. IMAP zászlók, útválasztási fejlécek az alapvető szállítási fejléseken túl, valamint TNEF kódolt adatok nem kerülnek megőrzésre.

Az load_from_eml() A biztonságos?

Minden hívás a load_from_eml() Független alkotást hoz létre mapi_message A bíróság. te Egyszerre több szálból is hívhatja, amíg minden egyes szála sajátját használja. Az üzenet tárgya.

Ezért is

 Magyar