Jak převést EML na MSG v C++?

Jak převést EML na MSG v C++?

Aspose.Email FOSS for C++ supports bidirectional conversion between EML (RFC 5322 / Formáty MIME) a MSG (Outlook MAPI). Použijte formát. mapi_message::load_from_eml() na dovoz a EML soubor, pak mapi_message::save() Napsat jako MSG a naopak s mapi_message::from_file() následující: mapi_message::save_to_eml().

Krok 1 Způsobil 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)

Krok 2 Konvertujte EML na MSG (cesta souboru)

mapi_message::load_from_eml() analyzuje soubor EML a odhalí jeho vlastnosti prostřednictvím standardní mapi_message Rozhraní. save() vypsat výsledek jako 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";
}

Krok 3 Konvertujte EML na MSG (Stream)

Použijte proud přetížení load_from_eml() když data EML pocházejí z sítě, socket, paměťový buffer nebo jiný 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"));
}

Krok 4 Přepínat MSG na EML

Naložit existující soubor MSG s mapi_message::from_file(), pak se řadí na EML formát 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";
}

Krok 5 Plná cesta (EML → MSG ← EML)

Následující příklad ukazuje, že subjekt, tělo, odesílač, příjemce a přílohy jsou všechny uchovávány prostřednictvím kompletní cesty:

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

Krok 6 Konverze na EML Bytes v paměti

Oba dva. save() a) save_to_eml() mají nultý argument přetížení, které se vrací std::vector<std::uint8_t>, které jsou užitečné pro přenos výsledků do sítě nebo databáze bez dotýkání souborového systému:

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

Obvyklé problémy a řešení

load_from_eml() Hodí na platný soubor EML . Ověřte, že soubor používá RFC 5322 CRLF konce řádku. EML soubory exportované některými nástroji mohou používat prázdné LF. Knihovna očekává, že konce řádku budou odpovídat normám.

Chybí přílohy po konverzi EML → MSG. Potvrďte, že EML obsahuje standardní MIME multipart/mixed nebo: multipart/related Přílohy k připojení. přes: cid: jsou přepravovány jako přílohy v MSG a měly by být k dispozici.

HTML tělo ztracené po MSG → EML. HTML obsah je uchováván během cesty zpět a zpět. kdy? message.html_body() je neprázdný. message.body() je osídlen v zdroj MSG, bude obsahovat pouze prostý text.

save_to_eml() Výstupní proud je prázdný. Otevřené výstupní toky s std::ios::binary. Textové proudy poškozují strukturu MIME ve Windows.

Předmět obsahuje: ?= kódování artefaktů. Toto jsou RFC 2047 kódované-slovo sekvence v originálu EML. Knihovna je zachovává tak, jak jsou. Dekódovat s knihovnou RFC 2047 Pokud potřebujete obyčejný Unicode předmět.

Časté otázky

Jsou připojené položky zachovány v obou směrech konverze?

Ano. Oba EML → MSG a MSG →EML konverze přenášejí všechny přílohy { Plache H LODELI 4 ] přes soubor . mapi_message binární přílohy jsou reprezentovány jako surové byty v mapi_attachment::data.

Zachovává EML → MSG HTML?

Ano, pokud EML obsahuje text/html Část MIME je uložená v těle HTML MAPI majetku a vráceného message.html_body() po nakládce.

Můžu konverzovat soubor EML?

Ano, iterace adresáře s std::filesystem::directory_iterator a zavolat. mapi_message::load_from_eml() na každém .eml cesta, pak ušetřit 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);
        }
    }
}

Co se zachovává během konverze EML MSG?

Předmět, prostý textový bod, HTML bod , jméno odesílatele a e-mailová adresa, seznam příjemců a všechny přílohy MIME. Vlajky IMAP, směrovací nadpisy mimo základní transportní nadpisy a údaje kódované TNEF nejsou uchovávány.

Je to … load_from_eml() Bezpečná?

Každý hovor na: load_from_eml() vytváří nezávislou mapi_message - To je příklad. může volat z několika článků současně, pokud každý článek používá vlastní Objekt zprávy.

Viz také:

 Čeština