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.gitadd_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.