Kaip konvertuoti C į C++

Kaip konvertuoti C į C++

Aspose.Email FOSS for C++ supports bidirectional conversion between EML (RFC 5322 / Štai ir yra, kaip išvystyti šviesą. mapi_message::load_from_eml() Importuoti ir Dėl failų, kurių mapi_message::save() rašyti kaip MSG - ir atvirkščiai su mapi_message::from_file() Sekė mapi_message::save_to_eml().

1 žingsnis - Projekto sukūrimas

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)

2 žingsnis — Konvertuoti EML į MSG (Sąrašo kelias)

mapi_message::load_from_eml() ištirti failą EML ir atskleisti jo savybes per Standartinė mapi_message Interviu - skambinkite save() Norėdami parašyti rezultatą kaip 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";
}

3 žingsnis — Konvertuoti EML į MSG (Stream)

Naudokite srauto perkrovą iš load_from_eml() kai EML duomenys yra iš tinklo lizdas, atminties buferis arba kitas 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 žingsnis – konvertuoti į MSG

Įkelkite esamą MSG failą su mapi_message::from_file(),Tada serializuokite į EML Formatas su 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 žingsnis – pilnas apsisukimo etapas (pavykęs)

Toliau pateiktas pavyzdys rodo, kad subjektas, kūnas, siuntėjas, gavėjai ir priedai yra išsaugoti per visą kelionę:

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

6 žingsnis — Konvertuoti į EML Bytes atmintyje

Abu save() ir save_to_eml() turi nulinio argumento perkrovas, kurios grįžta std::vector<std::uint8_t>, naudingas transliavimo rezultatams į tinklo ryšį arba Duomenų bazės be failų sistemos:

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

Bendros problemos ir taisyklės

load_from_eml() Įdėti į failą, kuris atrodo kaip tinkamas. Patikrinkite failą naudoja RFC 5322 EML failus, eksportuojamus kai kurių įrankių gali naudoti tik LF. biblioteka Norėdami pasiekti standartines linijas.

Trūksta priedų po EML → MSG konversijos. Patikrinkite, kad EML yra standartas MIME multipart/mixed arba multipart/related Nuotraukos: Inline Images Referenced perėjos cid: Jie yra laikomi priedais MSG ir turėtų būti.

HTML kūnas prarastas po MSG → EML. HTML turinys išsaugomas per apskrities kelionę Kada message.html_body() Tai yra tuščias, jei tik message.body() Jis yra apgyvendintas į Šaltinis MSG, EML bus tik paprastą tekstą.

save_to_eml() Stream išėjimas yra tuščias. Atviros išėjimo srovės su std::ios::binary.Teksto režimo srautai sugadina MIME struktūrą sistemoje Windows.

Tema yra ?= Archeologinių artefaktų kodavimas. 2047 m. – Šventosios šventės iškilmė Bibliografijos archyvas yra išsaugotas kaip-is. dekoduoti su RFC 2047 biblioteka Jei jums reikia unicode temų.

Dažnai užduodami klausimai

Ar priedai išsaugomi abiem konversijos kryptimis?

Tiek įkrovimo, tiek ir perdavimo operacijos atliekamos per visus įrenginius. mapi_message Dvejetainiai priedai yra pateikiami kaip žaliaviniai bajtai mapi_attachment::data.

Ar „HTML“ kūnas išsaugo HTML?

Jei įrankis yra a text/html MIME dalis, ji saugoma MAPI HTML kūne Turtas ir grąžinimas message.html_body() Po pakrovimo.

Ar galiu pakeisti failų katalogą EML?

Taip. Iteruokite adresą su std::filesystem::directory_iterator ir skambinti mapi_message::load_from_eml() Kiekvieną .eml Kelias, o tada išsaugoti su 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);
        }
    }
}

Kas išsaugoma per EML ↔ MSG konversiją?

Tema, paprastas tekstas kūnas, HTML kūno siuntėjo vardą ir el. pašto adresą, gavėjų sąrašą bei visus MIME priedus. IMAP vėliavos, maršrutizavimo antraštės už pagrindinių transporto antraščių ribų ir TNEF koduojami duomenys nėra išsaugomi.

yra load_from_eml() Saugusis šaknis?

Kiekvienas skambutis į load_from_eml() Sukūrė nepriklausomą mapi_message Įstatymas.lt Jūs gali būti skambinama iš kelių siūlių vienu metu, jei kiekvienas siūlas naudoja savo Žinutės objektas.

Taip pat

 Lietuvių