چگونه به تبدیل EML به MSG در C++

چگونه به تبدیل EML به MSG در C++

Aspose.Email FOSS for C++ supports bidirectional conversion between EML (RFC 5322 / در این صورت، به صورت زیر و با استفاده از آن می توانید از روش های مختلفی استفاده کنید. mapi_message::load_from_eml() برای وارد کردن یک پس از آن فایل، mapi_message::save() به عنوان یک «مرد» و برعکس، با mapi_message::from_file() پیروی از mapi_message::save_to_eml().

مرحله 1 - برنامه ریزی کنید

git clone https://github.com/aspose-email-foss/Aspose.Email-FOSS-for-Cpp.git
add_subdirectory(Aspose.Email-FOSS-for-Cpp)
target_link_libraries(your_target PRIVATE AsposeEmailFoss::AsposeEmailFoss)

مرحله 2 — تبدیل EML به MSG (پای فایل)

mapi_message::load_from_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() وقتی اطلاعات از یک شبکه وارد می شوند، پمپ، حافظه یا دیگر 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 - تبدیل به {فقط بر روی صفحه}

دانلود فایل موجود با mapi_message::from_file(),پس از آن به صورت زیر را کلیک کنید. Format با 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";
}

مرحله پنجم - سفر کامل (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() دارای اعداد بیش از حد استراتژی های صفر که باز می گردد 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() در صورت بروز یک فایله به صورت مستند، فایل را با دقت بررسی کنید. بررسی فایل ها با استفاده از RFC 5322 فایل های CRLF که توسط برخی از ابزار ها صادر می شوند ممکن است LF خالی را استفاده کنند. انتظار پایان خطوط با استاندارد.

پس از آن که به صورت متغیر، به یکدیگر تبدیل می شود. بررسی اینکه EML شامل استاندارد است. MIME multipart/mixed یا multipart/related برچسب ها: عکس های داخل صفحه از طریق cid: در این صورت، به عنوان یک فرمت از آن ها وارد می شود و باید حضور داشته باشد.

در این قسمت از HTML بدن بعد از MSG → EML. محتوای HTML در طول سفر به دور حفظ می شود وقتی message.html_body() بدون هیچ گونه شکلی، اگر فقط message.body() در آن جمعیت می شود. در این قسمت، فقط یک بخش متن ساده را می توان شامل کرد.

save_to_eml() جریان خروجی خالی است. جریان های باز با std::ios::binary.جریان های حالت متن ساختار MIME را در Windows آسیب می رسانند.

موضوع شامل ?= کد گذاری آرتروز ها. اینها 2047 کلمه ی رمزگذاری است. کتابخانه ای که در آن به عنوان یک کتابنامه ی متصل شده است، از طریق کتابچه های مختلفی ذخیره می شود. اگر شما به یک موضوع Unicode نیاز دارید.

سوالات متداول

آیا در هر دو جهت تبدیل، متصل ها حفظ می شوند؟?

هر دو نوع از چرخش ها به صورت یکسان و با استفاده از آن می توانند در تمام انواع چربی های مختلف قرار گیرند. mapi_message لیست فرمت ها: فرمهای باینری به عنوان بیوت خام در mapi_attachment::data.

آیا این کارها باعث می شود که بدن HTML را حفظ کند؟?

اگر این ماده شامل یک 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 پرچم ها، سرهای راه اندازی خارج از سر های حمل و نقل اساسی و داده های رمزگذاری شده TNEF حفظ نمی شوند.

است load_from_eml() تیتر امن؟?

هر یک از تماس های load_from_eml() ایجاد یک مستقل mapi_message شما.آیا می توانید از چندین thread همزمان به آن دعوت کنید، تا زمانی که هر thread از خود استفاده کند. پیام ها با هدف.

همچنین ببینید

 فارسی