כיצד להפוך EML ל- MSG ב C++
Aspose.Email FOSS for C++ supports bidirectional conversion between EML (RFC 5322 / MIME (MSG) ו- Outlook MAPI (ארכיון מפתח) mapi_message::load_from_eml() כדי לייבא את קובץ EML, ואז mapi_message::save() לכתוב את זה כמו MSG - ולהיפך עם mapi_message::from_file() עקבו אחרי mapi_message::save_to_eml().
שלב 1 – הגדרת הפרויקט
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)שלב 2 – להמיר EML ל MSG (מסע קובץ)
mapi_message::load_from_eml() הוא מפרש את קובץ ה-EML ומציג את תכונותיו באמצעות סטנדרטים mapi_message אינטראקציה - Call save() כדי לכתוב את התוצאה כ 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";
}שלב 3 – להפוך את EML ל- MSG (זרם)
השתמשו בתהליך העברת ה- load_from_eml() כאשר נתוני EML מגיעים מהרשת סוקט, זיכרון בופר או אחר 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"));
}שלב 4 – להפוך את MSG ל- EML
להעלות קובץ MSG קיימת עם mapi_message::from_file(),אז תתחיל לסדר את EML. פורמט עם 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 – מסלול סיבוב מלא (EML → MSG → EML)
הדוגמה הבאה מראה כי נושא, גוף, שליח, קבלנים, ותוספים נשמרים כולם באמצעות מסע סיבוב מלא:
#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';
}שלב 6 – להפוך ל- EML ביטים בזיכרון
שניהם save() ו save_to_eml() יש לנו אפס-argument העומס שהחזיר std::vector<std::uint8_t>,שימושי עבור תוצאות זרימה לתוך חיבור רשת או נתונים ללא מגע במערכת הקבצים:
#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();
}בעיות נפוצות ותיקונים
load_from_eml() הוא מופיע בקובץ EML. בדוק את הקובץ באמצעות RFC 5322 קבצי EML המוצאים על ידי כמה כלים עשויים להשתמש רק LF. הספרייה צפויים סיום קווים תואמים לסטנדרטים.
תוספים חסרים לאחר EML → MSG conversion. אישור EML מכיל סטנדרטים MIME multipart/mixed או multipart/related תגיות: תמונות של אינטראקציה דרך cid: הם נלקחים כפרקים ב- MSG וצריכים להיות נוכחים.
הגוף HTML אבוד לאחר MSG → EML. תוכן HTML נשמר דרך הסיבוב העגול כאשר message.html_body() לא נוח, אם רק message.body() הוא תושב ב מקור MSG, EML יכיל רק חלק טקסט שטוח.
save_to_eml() תוצאות ה-Stream ריקות. פתיחת רצועת הפריסה עם std::ios::binary.זרימת טקסט-מצב פוגעת במבנה MIME ב- Windows.
נושא מכיל ?= הקוד של ארכיטקטורים. אלה הם RFC 2047 סיבובים מילה קוד בספריה המקורית EML. הספרייה שומרת אותם כ-IS. דקוד עם ספריית RFC 2047 אם אתה צריך את הנושא Unicode שטוח.
שאלות נפוצות
האם תוספים נשמרים בשני הכיוונים של ההמרה?
כן. הן EML → MSG ו- MSM → הטרנספורמציות EMM נושאות את כל הקבצים MIME דרך mapi_message רשימת תוספים: תוסיפים בינאריים מוצגים בתור בייטים ירוקים. mapi_attachment::data.
האם EML → MSG שומרת על הגוף HTML?
אם ה- EML מכיל את text/html חלק MIME, הוא מאוחסן בגוף HTML של MAPI רכוש וחזרה על ידי message.html_body() לאחר ההעלאה.
האם אני יכול להמיר תיעוד של קבצי EML?
כן, תספק את התיעוד עם std::filesystem::directory_iterator וקוראים mapi_message::load_from_eml() על כל אחד .eml בדרך, ואז להציל עם 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);
}
}
}מה נשמר במהלך EML ↔ MSG המרה?
נושא, גוף טקסט שטוח, גוף HTML, שם המשלח וכתובת הדואר האלקטרוני, רשימת הנמענים וכל תוספי MIME. דגל IMAP, כותרות הדרכה מעבר לכותרת התחבורה הבסיסית, ונתונים הקודמים TNEF אינם נשמרים.
הוא load_from_eml() בטוח ברשת?
כל קריאה ל load_from_eml() יצירת עצמאות mapi_message דוגמה – אתה ניתן להתקשר אליו מתוך שורות מרובות בו זמנית כל עוד כל שורה משתמשת בשורה משלה. נושא הודעה.