Preobrazba EML-a i MSG-ova
Preobrazba EML-a i MSG-ova
Aspose.Email FOSS for C++ converts bidirectionally between EML (RFC 5322 / MIME) i u članku 1. MSG (Outlook MAPI) formati koristeći mapi_message.Put konverzije je: load_from_eml() → u memoriji mapi_message → save() za EML→MSG, i from_file() / from_stream() → save_to_eml() za MSG→EML.
Preobraziti EML u MSG
Uplatiti EML datoteku s: mapi_message::load_from_eml(), zatim serijalizirati na MSG s save():
#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';
message.save(std::filesystem::path("converted.msg"));
std::cout << "Saved converted.msg\n";
}load_from_eml() analizira MIME strukturu i popunjuje predmet MAPI, običan tekst tijelo, HTML telo, identitet pošiljatelja, popis primatelja i svi dijelovi priloga.
Preobraziti MSG u EML
Uplatiti MSG datoteku s: mapi_message::from_file(), onda nazovi 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";
}Preobrazba na temelju toka
Sve četiri odgovarajuće metode prihvaćaju: std::istream / std::ostream pretrgavanja za: “Službeni sustav” znači:
#include <fstream>
#include <filesystem>
#include "aspose/email/foss/msg/mapi_message.hpp"
int main()
{
// EML → MSG via streams
std::ifstream eml_in("message.eml", std::ios::binary);
const auto message = aspose::email::foss::msg::mapi_message::load_from_eml(eml_in);
std::ofstream msg_out("converted.msg", std::ios::binary);
message.save(msg_out);
// MSG → EML via streams
std::ifstream msg_in("converted.msg", std::ios::binary);
const auto reloaded = aspose::email::foss::msg::mapi_message::from_stream(msg_in);
std::ofstream eml_out("roundtrip.eml", std::ios::binary);
reloaded.save_to_eml(eml_out);
}Uvijek otvoreni tokovi s std::ios::binary. Tekst-mode tokovi prevoditi završetke redova na Windows, pokvariti binarne CFB podatke.
Uloženo u sustav za upravljanje i održavanje podataka.
save() i u članku 1. save_to_eml() i imaju nulu argument preopterećenja vraćaju std::vector<std::uint8_t>.Koristite ih da biste izbjegli sve unose i izlaze datoteke:
#include <filesystem>
#include <vector>
#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"));
const std::vector<std::uint8_t> msg_bytes = message.save();
const std::vector<std::uint8_t> eml_bytes = message.save_to_eml();
// Write to a database, network socket, or other destination...
}Konverzija serijskog direktorija
Iterirati direktorij s: std::filesystem::directory_iterator preobraziti sve .eml datoteke u jednom prolazu:
#include <filesystem>
#include <iostream>
#include "aspose/email/foss/msg/mapi_message.hpp"
int main()
{
const std::filesystem::path input_dir("emails/eml");
const std::filesystem::path output_dir("emails/msg");
std::filesystem::create_directories(output_dir);
for (const auto& entry : std::filesystem::directory_iterator(input_dir))
{
if (entry.path().extension() != ".eml")
continue;
const auto message = aspose::email::foss::msg::mapi_message::load_from_eml(
entry.path());
auto out_path = output_dir / entry.path().filename();
out_path.replace_extension(".msg");
message.save(out_path);
std::cout << "Converted: " << entry.path().filename() << '\n';
}
}Savjeti i najbolje prakse
- Otvoriti sve datoteke s:
std::ios::binaryi ulazni i izlazni. - Prefer
load_from_eml(path)preko tok preopterećenja kada imate put; put Preopterećenje upravlja otvaranjem datoteke unutar i je malo jednostavnije. - Koristite preopterećenja bajtova (
save()i u članku 1.save_to_eml()(bez args) prilikom provjeravanja podataka kroz cijevi između usluga kako bi se izbjegli privremeni dosje. - Predmet, tijelo, HTML telo, šaljač, primaoci i MIME prilozi su sve sačuvani kroz potpuni povratni put.
- U ovom slučaju, ako je to moguće, podnositelj zahtjeva može zatražiti od strane nadležnog tijela da se u skladu s člankom 13. stavku 1. točke (a) Uredbe (EU) br. 1071/2013 provede postupak preusmjeravanja podataka na IMAP-u ili na internetskoj mreži za pretvaranje informacija o tome kako su oni povezani sa njima.
Zajednički problemi
| Izdavanje | Uzrok | Popraviti |
|---|---|---|
load_from_eml Baci na valjanom datoteku | U ovom slučaju, u skladu s člankom 16. stavkom 1. točkom (a) i podstavkom 7. | Zajamčite da EML koristi RFC 5322 CRLF; neki izvozni alati pišu prazan LF |
| Nepostojeće priloge nakon EML → MSG | Nestandardno kodiranje MIME priloga | Provjeriti primjenu EML-a multipart/mixed s standardnim Content-Disposition: attachment |
| Prazno HTML tijelo nakon MSG → EML | Izvor MSG ima samo tekst u jednostavnom obliku. | Čekaj. message.html_body(); ako je prazna, pohranjen je samo običan tekst |
| Izlaz struje je pokvaren. | Promet otvoren u tekstualnom režimu | Uvijek koristiti: std::ios::binary |
Predmet prikazuje ?= sekvence | RFC 2047 kodirana riječ u izvornom EML-u | Decodificirati s RFC 2047. knjižnice; knjižica čuva kodiran oblik |
FAQ
Da li EML → MSG čuva HTML tijelo?
Da, A. text/html MIME dio je pohranjen u svojstvu tijela HTML-a i pristupačan je. preko: message.html_body() nakon utovarenja.
Da li se veza čuva u oba smjera?
Da. Svi dijelovi MIME priključka su provedeni kroz mapi_message popis priloga. Podaci o binarnim prilozima dostupni su kao: attachment.data (a) std::vector<std::uint8_t>).
Mogu li konvertirati jedan EML na više izlaznih formata istovremeno?
-Da, napunite EML jednom sa… load_from_eml(), onda pozovi oboje. save() i u članku 1. save_to_eml() na istom memoriji mapi_message -Ne, ne mogu.
-Da, to je… load_from_eml() Bezbedno?
Svaki poziv stvara nezavisnu mapi_message Više tema može nazvati: load_from_eml() U tom slučaju, podnositelj zahtjeva može na temelju članka 4. stavka 1. točke (a) staviti sljedeće uvjete:.
Što se događa s porukama bez teksta?
Ako EML sadrži samo: text/html dio, message.body() vraća prazan niz. i u članku 1. message.html_body() Oba su sačuvana kroz MSG. serijalizacija.
Svrha referentnog API-a
| Klasa / metoda | Opisivanje |
|---|---|
mapi_message::load_from_eml(path) | Proučiti EML datoteku u mapi_message |
mapi_message::load_from_eml(stream) | Proučiti EML iz std::istream |
mapi_message::save(path) | Serijaliziranje mapi_message na MSG datoteku |
mapi_message::save(stream) | Napisati MSG bajtova na std::ostream |
mapi_message::save() | U skladu s člankom 21. stavkom 1. std::vector<std::uint8_t> |
mapi_message::from_file(path) | Uplatiti MSG datoteku u mapi_message |
mapi_message::from_stream(stream) | Opterećenje MSG-om od std::istream |
mapi_message::save_to_eml(path) | Napisati EML na putanje datoteke |
mapi_message::save_to_eml(stream) | Napisati EML bajtova na std::ostream |
mapi_message::save_to_eml() | Iznos: std::vector<std::uint8_t> |