Ako previesť EML na MSG v C++

Ako previesť EML na MSG v C++

Aspose.Email FOSS for C++ supports bidirectional conversion between EML (RFC 5322 / MIME) a formáty MSG (Outlook MAPI). Použitie mapi_message::load_from_eml() importovať a EML súbor, potom mapi_message::save() Napísať to ako MSG - a naopak s mapi_message::from_file() Nasleduje mapi_message::save_to_eml().

Krok 1 - Vytvorenie projektu

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 — Previesť EML na MSG (Súbor Path)

mapi_message::load_from_eml() analyzuje súbor EML a odhaľuje jeho vlastnosti prostredníctvom Štandardom je mapi_message Interiér - volanie save() Napíšte výsledok ako 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 — Previesť EML na MSG (Stream)

Použite preťaženie prúdu na load_from_eml() keď EML dáta pochádzajú z siete pamäťový zásuvník, pamäte buffer alebo iný 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 — Previesť MSG na EML

Nahrať existujúci súbor MSG s mapi_message::from_file(), potom serializovať na EML Formátovanie 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ý okruh-cestovanie (EML → MSG → EML)

Nasledujúci príklad ukazuje, že predmet, telo, odosielateľ, príjemcovia a prílohy sú všetky zachované počas úplného okrúhleho výletu:

#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 — Previesť na EML bajtov v pamäti

Obe save() a save_to_eml() majú nula-argument preťaženia, ktoré sa vrátia std::vector<std::uint8_t>, užitočné pre streamovanie výsledkov na sieťové pripojenie alebo Databáza bez dotyku súborové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();
}

Spoločné problémy a opravy

load_from_eml() Hádza na platný vzhľad EML súbor. Overenie súboru používa RFC 5322 CRLF koncov. EML súbory exportované niektorými nástrojmi môžu používať nahé LF. Knižnica Očakáva sa, že končí v súlade s normami.

Chýbajúce prílohy po EML → MSG konverzie. Potvrdiť EML obsahuje štandardné MIME multipart/mixed alebo multipart/related Inline obrázky referenčné Via → cid: Sú uvedené v MSG a mali by byť prítomné.

HTML telo stratené po MSG → EML. Obsah HTML sa zachováva počas okrúhleho výletu Kedy message.html_body() je prázdna, ak len message.body() Je obývaná v zdroj MSG, EML bude obsahovať iba jednoduchý text časť.

save_to_eml() Výstupný stream je prázdny. Otvorené výstupné prúdy s std::ios::binary.Streamy textu v režime korumpujú štruktúru MIME vo Windowse.

Téma obsahuje ?= Kódovanie artefaktov . RFC 2047 kódované slová sekvencie v pôvodnom EML. Knižnica ich zachováva ako-je. dekódovanie s RFC 2047 knižnice Ak potrebujete jednoduchý Unicode.

Často kladené otázky

Sú prílohy zachované v oboch smeroch konverzie?

Áno. obaja EML → MSG a MS G → EM L konverzie nesú všetky prílohy MIME cez mapi_message binárne prílohy sú reprezentované ako surové bajty v mapi_attachment::data.

Má EML → MSG zachovať HTML telo?

Ak EML obsahuje a text/html MIME časť, je uložená v tele HTML MAPI majetku a vrátené message.html_body() Po nakladaní.

Môžem batch-konvertovať adresár EML súborov?

Áno. Iterujte adresár s std::filesystem::directory_iterator a volanie mapi_message::load_from_eml() Na každom .eml Cesta, potom zachrániť 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);
        }
    }
}

Čo sa zachováva počas EML ↔ MSG konverzie?

Predmet, textové telo, HTML telo a odosielateľské meno a e-mailová adresa, zoznam príjemcov a všetky prílohy MIME. IMAP vlajky, hlavičky smerovania nad základnými hlavami prepravy a údaje kódované TNEF sa neuchovávajú.

je load_from_eml() Bezpečné trate?

Každý hovor na load_from_eml() Vytvorte nezávislý mapi_message Prípad. ty Môžete ho volať z viacerých prameňov súčasne, pokiaľ každý pramen používa svoj vlastný. Objektové správy .

Taktiež

 Slovenčina