Ako previesť EML na MSG v C++
Aspose.Email FOSS for C++ supports bidirectional conversion between EML (RFC 5322 / MIME) a formáty MSG (Outlook MAPI). Použitie mapi_message::load_from_eml() importovať a EML súbor, potom mapi_message::save() Napísať to ako MSG - a naopak s mapi_message::from_file() Nasleduje mapi_message::save_to_eml().
Krok 1 - Vytvorenie projektu
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 — Previesť EML na MSG (Súbor Path)
mapi_message::load_from_eml() analyzuje súbor EML a odhaľuje jeho vlastnosti prostredníctvom Štandardom je mapi_message Interiér - volanie save() Napíšte výsledok ako 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 — Previesť EML na MSG (Stream)
Použite preťaženie prúdu na load_from_eml() keď EML dáta pochádzajú z siete pamäťový zásuvník, pamäte buffer alebo iný 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 — Previesť MSG na EML
Nahrať existujúci súbor MSG s mapi_message::from_file(), potom serializovať na EML Formátovanie 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ý okruh-cestovanie (EML → MSG → EML)
Nasledujúci príklad ukazuje, že predmet, telo, odosielateľ, príjemcovia a prílohy sú všetky zachované počas úplného okrúhleho výletu:
#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 — Previesť na EML bajtov v pamäti
Obe save() a save_to_eml() majú nula-argument preťaženia, ktoré sa vrátia std::vector<std::uint8_t>, užitočné pre streamovanie výsledkov na sieťové pripojenie alebo Databáza bez dotyku súborové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();
}Spoločné problémy a opravy
load_from_eml() Hádza na platný vzhľad EML súbor. Overenie súboru používa RFC 5322 CRLF koncov. EML súbory exportované niektorými nástrojmi môžu používať nahé LF. Knižnica Očakáva sa, že končí v súlade s normami.
Chýbajúce prílohy po EML → MSG konverzie. Potvrdiť EML obsahuje štandardné MIME multipart/mixed alebo multipart/related Inline obrázky referenčné Via → cid: Sú uvedené v MSG a mali by byť prítomné.
HTML telo stratené po MSG → EML. Obsah HTML sa zachováva počas okrúhleho výletu Kedy message.html_body() je prázdna, ak len message.body() Je obývaná v zdroj MSG, EML bude obsahovať iba jednoduchý text časť.
save_to_eml() Výstupný stream je prázdny. Otvorené výstupné prúdy s std::ios::binary.Streamy textu v režime korumpujú štruktúru MIME vo Windowse.
Téma obsahuje ?= Kódovanie artefaktov . RFC 2047 kódované slová sekvencie v pôvodnom EML. Knižnica ich zachováva ako-je. dekódovanie s RFC 2047 knižnice Ak potrebujete jednoduchý Unicode.
Často kladené otázky
Sú prílohy zachované v oboch smeroch konverzie?
Áno. obaja EML → MSG a MS G → EM L konverzie nesú všetky prílohy MIME cez mapi_message binárne prílohy sú reprezentované ako surové bajty v mapi_attachment::data.
Má EML → MSG zachovať HTML telo?
Ak EML obsahuje a text/html MIME časť, je uložená v tele HTML MAPI majetku a vrátené message.html_body() Po nakladaní.
Môžem batch-konvertovať adresár EML súborov?
Áno. Iterujte adresár s std::filesystem::directory_iterator a volanie mapi_message::load_from_eml() Na každom .eml Cesta, potom zachrániť 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);
}
}
}Čo sa zachováva počas EML ↔ MSG konverzie?
Predmet, textové telo, HTML telo a odosielateľské meno a e-mailová adresa, zoznam príjemcov a všetky prílohy MIME. IMAP vlajky, hlavičky smerovania nad základnými hlavami prepravy a údaje kódované TNEF sa neuchovávajú.
je load_from_eml() Bezpečné trate?
Každý hovor na load_from_eml() Vytvorte nezávislý mapi_message Prípad. ty Môžete ho volať z viacerých prameňov súčasne, pokiaľ každý pramen používa svoj vlastný. Objektové správy .