كيفية تحويل EML إلى MSG في C++
Aspose.Email FOSS for C++ supports bidirectional conversion between EML (RFC 5322 / MIME (MAPI) و MSG (Outlook MAPI). mapi_message::load_from_eml() استيراد واحد ملف EML، ثم mapi_message::save() أكتبها كـ MSG - والعكس بالعكس مع mapi_message::from_file() تليها بواسطة mapi_message::save_to_eml().
الخطوة الأولى: إعداد المشروع
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 الوسائط - الاتصال 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 Bytes في الذاكرة
كلاهما save() و save_to_eml() 0 - أسباب العودة التي تظهر 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 التحويل. تأكيد EML يحتوي على المعيار MIME multipart/mixed أو multipart/related أجزاء الارتباط.الصور المذكورة في الخطوط عبر cid: يتم حملها كملفات في MSG وينبغي أن تكون موجودة.
جسم HTML مفقود بعد MSG → EML. يتم الحفاظ على محتوى HTML من خلال الجولة عندما message.html_body() لا يُعرف، إن لم يكن message.body() يُعرف في سكان مصدر MSG، EML سوف تحتوي على جزء واحد فقط من النص المسطح.
save_to_eml() إنتاج البث فارغ. أضف تعليق حول مفتوحة مع std::ios::binary.تدفقات وضع النص تفسد بنية MIME على Windows.
الموضوع يحتوي على ?= إخراج الأثرات . هذه هي RFC 2047 ترتيب الكلمات المشفرة في EML الأصلي.المكتبة تحافظ عليها على ما يلي: تخفيف مع مكتبت RFC 2047 إذا كنت بحاجة إلى موضوع واحد مسطح.
الأسئلة المتكررة
هل يتم الحفاظ على المرفقات في كلا الاتجاهين التحويل؟?
نعم. كلا EML → MSG و MSM → EMM التحويلات تحمل جميع المرفقات MIME من خلال mapi_message قائمة المرفقات.مرفقة ثنائية تمثل بايتات خام في mapi_attachment::data.
هل EML → MSG يحافظ على جسم HTML؟?
إذا كان EML يحتوي على text/html جزء MIME ، يتم تخزينه في جسم MAPI HTML الممتلكات التي تم إرجاعها من خلال 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 مثال : أنت يمكن أن يطلق عليه من عدة شرائح في نفس الوقت طالما أن كل شريط يستخدم نفسه. موضوع الرسالة .