Jak převést EML na MSG v C++?
Aspose.Email FOSS for C++ supports bidirectional conversion between EML (RFC 5322 / Formáty MIME) a MSG (Outlook MAPI). Použijte formát. mapi_message::load_from_eml() na dovoz a EML soubor, pak mapi_message::save() Napsat jako MSG a naopak s mapi_message::from_file() následující: mapi_message::save_to_eml().
Krok 1 Způsobil 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)Krok 2 Konvertujte EML na MSG (cesta souboru)
mapi_message::load_from_eml() analyzuje soubor EML a odhalí jeho vlastnosti prostřednictvím standardní mapi_message Rozhraní. save() vypsat výsledek jako 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";
}Krok 3 Konvertujte EML na MSG (Stream)
Použijte proud přetížení load_from_eml() když data EML pocházejí z sítě, socket, paměťový buffer nebo jiný 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"));
}Krok 4 Přepínat MSG na EML
Naložit existující soubor MSG s mapi_message::from_file(), pak se řadí na EML formát 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";
}Krok 5 Plná cesta (EML → MSG ← EML)
Následující příklad ukazuje, že subjekt, tělo, odesílač, příjemce a přílohy jsou všechny uchovávány prostřednictvím kompletní cesty:
#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';
}Krok 6 Konverze na EML Bytes v paměti
Oba dva. save() a) save_to_eml() mají nultý argument přetížení, které se vrací std::vector<std::uint8_t>, které jsou užitečné pro přenos výsledků do sítě nebo databáze bez dotýkání souborového systému:
#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();
}Obvyklé problémy a řešení
load_from_eml() Hodí na platný soubor EML . Ověřte, že soubor používá RFC 5322 CRLF konce řádku. EML soubory exportované některými nástroji mohou používat prázdné LF. Knihovna očekává, že konce řádku budou odpovídat normám.
Chybí přílohy po konverzi EML → MSG. Potvrďte, že EML obsahuje standardní MIME multipart/mixed nebo: multipart/related Přílohy k připojení. přes: cid: jsou přepravovány jako přílohy v MSG a měly by být k dispozici.
HTML tělo ztracené po MSG → EML. HTML obsah je uchováván během cesty zpět a zpět. kdy? message.html_body() je neprázdný. message.body() je osídlen v zdroj MSG, bude obsahovat pouze prostý text.
save_to_eml() Výstupní proud je prázdný. Otevřené výstupní toky s std::ios::binary. Textové proudy poškozují strukturu MIME ve Windows.
Předmět obsahuje: ?= kódování artefaktů. Toto jsou RFC 2047 kódované-slovo sekvence v originálu EML. Knihovna je zachovává tak, jak jsou. Dekódovat s knihovnou RFC 2047 Pokud potřebujete obyčejný Unicode předmět.
Časté otázky
Jsou připojené položky zachovány v obou směrech konverze?
Ano. Oba EML → MSG a MSG →EML konverze přenášejí všechny přílohy { Plache H LODELI 4 ] přes soubor . mapi_message binární přílohy jsou reprezentovány jako surové byty v mapi_attachment::data.
Zachovává EML → MSG HTML?
Ano, pokud EML obsahuje text/html Část MIME je uložená v těle HTML MAPI majetku a vráceného message.html_body() po nakládce.
Můžu konverzovat soubor EML?
Ano, iterace adresáře s std::filesystem::directory_iterator a zavolat. mapi_message::load_from_eml() na každém .eml cesta, pak ušetřit 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);
}
}
}Co se zachovává během konverze EML MSG?
Předmět, prostý textový bod, HTML bod , jméno odesílatele a e-mailová adresa, seznam příjemců a všechny přílohy MIME. Vlajky IMAP, směrovací nadpisy mimo základní transportní nadpisy a údaje kódované TNEF nejsou uchovávány.
Je to … load_from_eml() Bezpečná?
Každý hovor na: load_from_eml() vytváří nezávislou mapi_message - To je příklad. může volat z několika článků současně, pokud každý článek používá vlastní Objekt zprávy.