Miten muuntaa C++: ssä

Miten muuntaa C++: ssä

Aspose.Email FOSS for C++ supports bidirectional conversion between EML (RFC 5322 / Tyypillisesti käytetään myös (mukaan lukien) mapi_message::load_from_eml() Tuonti on Jälkimmäinen tiedosto, sitten mapi_message::save() kirjoittaa sen MSG - ja päinvastoin mapi_message::from_file() Seuraa → mapi_message::save_to_eml().

Vaihe 1 – Projekti on luotu

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)

Vaihe 2 — Muunna EML kohteeseen MSG (tiedostojen polku)

mapi_message::load_from_eml() Se analysoi tiedoston ja paljastaa sen ominaisuudet Standardi on mapi_message Yhteyshenkilö - Call save() Kirjoita tulos niin kuin 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";
}

Vaihe 3 — Muunna EML kohteeseen MSG (Stream)

Käytä virtausta ylikuormituksesta load_from_eml() Kun tietokone on peräisin verkosta, muistipuoli, muistikortti tai muu 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"));
}

Vaihe 4 — Muunna MSG kohteeseen EML

Lataa olemassa oleva MSG tiedosto, jossa on mapi_message::from_file(),Sitten sitten sarjakuvaus. Muotoilu kanssa 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";
}

Vaihe 5 – Täysi kierros (EML → MSG→ EML)

Seuraava esimerkki osoittaa, että aihe, ruumis, lähettäjä, vastaanottaja ja liitteet säilytetään koko kierroksella:

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

Vaihe 6 — Muunna muistiin EML bytejä

Molemmat save() ja save_to_eml() on nollasuhteiden ylikuormituksia, jotka palaavat std::vector<std::uint8_t>, joka on hyödyllinen tulosten suoratoistamiseksi verkkoyhteydelle tai Tietokanta ilman tiedostojärjestelmää:

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

Yleisiä ongelmia ja korjauksia

load_from_eml() Palaa sivulle Voimassa oleva tiedosto. Tarkista, että tiedostoa käytetään RFC 5322 CRLF-viivojen päätteet. EML tiedostot, jotka jotkut työkalut vievät, voivat käyttää paljaita LF:ää. Odotamme standardin mukaisia linjoja.

Puuttuvat liitteet EML → MSG muuntamisen jälkeen. Vahvistaa, että EML sisältää standardin MIME multipart/mixed tai multipart/related Inline Images Referenced -kuvat viittaavat kautta cid: Ne on tarkoitettu käytettäväksi paikan päällä ja niiden tulee olla läsnä.

HTML-kohdetta on hävinnyt sen jälkeen, kun MSG → EML. HTML-sisältö säilyy ympärivuorokautisen aikana Kun message.html_body() Ei ole tyhjää, jos vain message.body() Se on asutettu alueella Tällöin tekstiä on vain yksi osa.

save_to_eml() Stream-lähtö on tyhjä. Avoin ulostulo virtaa std::ios::binary.Tekstitilan virrat vahingoittavat MIME -rakennetta Windowsissa.

Aihe sisältää ?= Koodaus taideteoksia varten. Näitä ovat 2047 koodattuja sananlaskuja Kirjaston ominaisuudet ovat: Kirjasto säilyttää ne sellaisenaan. Jos tarvitset Unicode-koodia, niin.

Usein kysytyt kysymykset

Säilytetäänkö liitetiedostot molempiin muuntokäyttöön?

Kumpikin on jo varannut ja laittanut kaikki muutkin paikat pois. mapi_message Binary liitteet ovat raaka-baitteina esitetyt mapi_attachment::data.

Onko HTTP:n säilyttäminen HTML-kohdassa mahdollista?

Jos laite sisältää a text/html MIME osa, se tallennetaan MAPI HTML-kohteeseen omaisuutta ja palautetaan message.html_body() Latauksen jälkeen.

Voinko vaihtaa osan EML tiedostoista?

Kyllä. Iterate osoitteen kanssa std::filesystem::directory_iterator ja soittaminen mapi_message::load_from_eml() Jokaisella on .eml Matka, sitten pelastaminen 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);
        }
    }
}

Mitä säilytetään EML ↔ MSG muuntamisen aikana?

Aihe, yksinkertainen teksti, HTML-keho, lähettäjän nimi ja sähköpostiosoite, vastaanottajaluettelo sekä kaikki MIME liitteet. IMAP liput, reititysotsikot perusliikenteen otsikoiden ulkopuolella ja TNEF-koodattuja tietoja ei säilytetä.

on load_from_eml() Turvallinen turvavyö?

Jokainen soitto on load_from_eml() Luo itsenäinen mapi_message Tehtävä - Sinä Voit soittaa sen useista säikeistä samanaikaisesti, kunhan jokainen säke käyttää omaa Viestin kohteena oleva.

Katso myös

 Suomi