Hvordan konverterer man til C++
Aspose.Email FOSS for C++ supports bidirectional conversion between EML (RFC 5322 / Udvælgelse af udstyr og udskiftning af værktøjer. mapi_message::load_from_eml() Import af en Filmen er så, at mapi_message::save() at skrive det som MSG - og omvendt med mapi_message::from_file() Efterfulgt af mapi_message::save_to_eml().
Trin 1 - Opbyg projektet
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)Trin 2 — Konverter EML til MSG (File Path)
mapi_message::load_from_eml() analyserer filen EML og udsætter dens egenskaber gennem Den standard mapi_message Interface – Ring til save() Skriv resultatet som 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";
}Trin 3 — Konverter EML til MSG (Stream)
Brug af overbelastningen af strømmen load_from_eml() Når data kommer fra et netværk, enhed, hukommelsestab eller et andet 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"));
}Trin 4 — Konverter MSG til EML
Indlæse en eksisterende fil med mapi_message::from_file(),Så bliver det serialiseret til EML Formater med 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";
}Trin 5 – Fuld rundrejse (EML → MSG→ EML)
Følgende eksempel viser, at emnet, kroppen, afsenderen, modtageren og vedhæftede filer bevares gennem en komplet rundrejse:
#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';
}Trin 6 — Konverter til EML byte i hukommelse
Begge dele save() og save_to_eml() har nul-argument overbelastninger, der returnerer std::vector<std::uint8_t>, der er nyttige til streaming af resultater til en netværksforbindelse eller Databasen uden at røre ved filsystemet:
#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();
}Almindelige problemer og rettelser
load_from_eml() En udtænkt fil med et gyldigt look. Kontroller filen bruger RFC 5322 EML filer, der eksporteres af nogle værktøjer, kan bruge bare LF. Biblioteket Forvent standardkompatible linjeafslutninger.
Manglende vedhæftede filer efter EML → MSG konvertering. Bekræft, at EML indeholder standard MIME multipart/mixed eller multipart/related Inline billeder refereret Via af cid: De er som vedhæftede filer i MSG og skal være til stede.
HTML-krop tabt efter MSG → EML. HTML-indhold bevares gennem rundrejsen Hvornår message.html_body() Det er ikke tomt, hvis det kun message.body() er befolket i den ved udgangspunktet MSG, vil EML kun indeholde en del af ren tekst.
save_to_eml() Strømmen er tom. Åbne strømninger med std::ios::binary.Tekst-tilstandsstrømme ødelægger strukturen MIME i Windows.
Emnet indeholder ?= Kodning af artefakter. Dette er RFC 2047 kodet-ord sekvenser Det er et bibliotek, der bevarer dem som-er. Dekodér med et RFC 2047 bibliotek Hvis du har brug for et Unicode-tema.
Ofte stillede spørgsmål
Er vedhæftede filer bevaret i begge konverteringsretninger?
Både de to udvidede og de store, der er på vej til at få fat i det. mapi_message Binære vedhæftede filer er repræsenteret som rå bytes i mapi_attachment::data.
Kan man bevare HTML-krop?
Hvis et af de to indholdsstoffer indeholder en text/html MIME del, den er gemt i MAPI HTML-kroppen Ejendom og returneret af message.html_body() Efter indlæggelse af.
Kan jeg batch-konvertere en mappe af EML filer?
Ja. Iterér kataloget med std::filesystem::directory_iterator og kald mapi_message::load_from_eml() På hver .eml Vejen, så red med 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);
}
}
}Hvad gemmes der under konverteringen af EML ↔ MSG?
Emne, tekstkrop, HTML-kropp, afsendernavn og e-mailadresse, modtagerliste og alle MIME vedhæftede filer. IMAP flag, routing headers ud over grundlæggende transportheaders og TNEF-kodede data bevares ikke.
er load_from_eml() Trådløs sikkerhed?
Hver opfordring til load_from_eml() Skab en uafhængig mapi_message Forretning.dk kan kalde det fra flere tråde samtidig, så længe hver tråd bruger sin egen Besked om objekt.