Kako pretvoriti EML u MSG na C++
Aspose.Email FOSS for C++ supports bidirectional conversion between EML (RFC 5322 / Uspjeh i sposobnost korištenja (u slučaju da se koristi) mapi_message::load_from_eml() Uvoziti jedan Zatim se datoteka, nakon mapi_message::save() da ga napiše kao MSG – i obratno s mapi_message::from_file() Slijedio je mapi_message::save_to_eml().
Korak 1 - Uspostavite projekt
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)Korak 2 — Pretvorite EML u MSG (Put datoteke)
mapi_message::load_from_eml() Slučajno se upijaju i otkrivaju njezina svojstva kroz Standardni mapi_message Interfejs - poziv save() Da biste to učinili, ispisujte rezultat kao 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";
}Korak 3 — Pretvoriti EML u MSG (Stream)
Koristite pretjerano opterećenje toka load_from_eml() kada podaci iz mreže dolaze iz EML čep, memorijski buffer ili drugi 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"));
}Korak 4 — Pretvorite MSG u EML
Uložite postojeće datoteke s mapi_message::from_file(),Nakon toga se serializira na EML Formati 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";
}5. korak – Cijeli put (EML → MSG→ EML)
Sljedeći primjer pokazuje da su predmet, tijelo, pošiljatelj, primatelj i priloga sačuvani tijekom cijelog putovanja:
#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';
}Korak 6 — Pretvoriti u EML bajti u memoriji
Obojica save() i save_to_eml() imaju nultog argumenta preopterećenja koje se vraćaju std::vector<std::uint8_t>, korisno za streaming rezultata na mrežnu vezu ili Pristup datoteci bez dodirivanja sustava datotek:
#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();
}Zajednička pitanja i popravci
load_from_eml() Učinite to ispravno na primjeru datoteke. Provjerite korištenje datoteke RFC 5322 EML datoteke koje izvoze neki alati mogu koristiti GOLF LF. Očekuje se da će linije završiti u skladu sa standardima.
Nedostaju prijenosi nakon konverzije. Potvrdite da EML sadrži standardni MIME multipart/mixed ili multipart/related Slike s referencijskim dijelovima preko cid: Oni su u tijeku kao prijenosnici u MSG i trebaju biti prisutni.
HTML tijelo izgubljeno nakon MSG → EML. HTML sadržaj se čuva tijekom okruglog putovanja Kada message.html_body() Ne može biti prazno, ako je message.body() Naseljen je u Izvor MSG, EML će sadržavati samo dio jednostavnog teksta.
save_to_eml() Izlazni tok je prazan. Otvoreni izvodi struje s std::ios::binary.Streams u tekstovnom načinu rada narušavaju strukturu MIME na Windows-u.
Tema sadrži ?= Kodiranje artefakata. Ovo su RFC 2047 kodirane riječi sekvence U knjižnici se čuvaju kao-is. dekodiranje s RFC 2047 knjižnica Ako vam je potreban Unicode.
Često postavljana pitanja
Jesu li priloge sačuvane u oba smjera konverzije?
I za sve, i za one koji su u stanju da se bave tim problemom. mapi_message Binarne prijenose su predstavljene kao sirovi bajti u mapi_attachment::data.
Je li EML → MSG sačuvati HTML tijelo?
Ako je u sadržaju a text/html MIME dio, pohranjen je u HTML-ovome tijelu MAPI Imovina i vraćanje message.html_body() Nakon punjenja.
Mogu li pretvoriti katalog datoteka EML u serije?
Iterirajte direktorij s std::filesystem::directory_iterator i poziva mapi_message::load_from_eml() Svaki je .eml Put, a zatim spasiti 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);
}
}
}Što se čuva tijekom konverzije?
Subject, body-text, HTML body, ime i adresa pošiljatelja, popis primatelja i svi prilogi. MIME zastave, naslovi za usmjeravanje izvan osnovnih naslova prijevoza i TNEF kodirani podaci nisu sačuvani.
je load_from_eml() Traktorski sigurni?
Svaki poziv na load_from_eml() Stvoriti neovisnu mapi_message Upravni odbor. Možete ga nazvati iz više nitova istodobno, sve dok svaka nit koristi svoju vlastitu. Objekt poruke.