कैसे EML को C++ में MSG में परिवर्तित करें

कैसे EML को C++ में MSG में परिवर्तित करें

Aspose.Email FOSS for C++ supports bidirectional conversion between EML (RFC 5322 / MIME (Map) और MSG (Outlook MAPI) प्रारूपों का उपयोग करें। mapi_message::load_from_eml() एक आयात करने के लिए 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() 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 फ़ाइल को लोड करें 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() 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 → MSG रूपांतरण के बाद खोए गए एप्लिकेशन।. मानक EML को शामिल करने की पुष्टि करें MIME multipart/mixed या multipart/related इमेज कॉपीरइट Inline Images Referenced के माध्यम से cid: वे एमएसजी में एप्लिकेशन के रूप में ले जाया जाता है और मौजूद होना चाहिए।.

HTML शरीर MSG → EML के बाद खो गया है।. HTML सामग्री को रिकॉर्ड-ट्रॉप के माध्यम से संरक्षित किया जाता है जब message.html_body() अतः यदि नहीं, तो केवल message.body() जनसंख्या में रहते हैं स्रोत MSG, EML में केवल एक सीधे पाठ भाग शामिल होगा।.

save_to_eml() प्रवाह का उत्पादन खाली है।. खुले प्रवाह के साथ std::ios::binary. पाठ मोड प्रवाह विंडोज पर एमआईएमई संरचना को खराब कर देता है।.

विषय में शामिल हैं ?= आर्टिफिशियल कोड करें।. RFC 2047 कोड-शब्द अनुक्रम हैं मूल EML में पुस्तकालय उन्हें आरएफसी 2047 लाइब्रेरी के साथ डिकोड करता है। यदि आपको यूनिकोड विषय की आवश्यकता है।.

अक्सर पूछे जाने वाले प्रश्न

क्या दोनों दिशाओं में संलग्नक बनाए रखा जाता है?

दोनों EML → MSG और MSM → EMM रूपांतरण सभी MIME एप्लिकेशन के माध्यम से ले जाते हैं। mapi_message बाइनरी एप्लिकेशन को कच्चे बूट के रूप में प्रस्तुत किया जाता है mapi_attachment::data.

क्या एमएल → एमएसजी एचटीएमएल शरीर को बचाता है?

यदि ईएमएल में एक 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 शरीर , भेजने वाले नाम और ईमेल पता, प्राप्तकर्ता सूची, और सभी एमआईएमई एप्लिकेशन. आईएमएपी झंडे, मूल परिवहन शीर्षक के अलावा राउटिंग शीर्षकों, या टीएनईएफ कोड डेटा नहीं बचाया जाता है।.

है load_from_eml() सुरक्षित है?

हर कॉल के लिए load_from_eml() एक स्वतंत्र बनाता है mapi_message उदाहरण के लिए, आप इसे एक ही समय में कई तारों से बुलाया जा सकता है, जब तक कि प्रत्येक तारा अपना उपयोग करता है। संदेश के उद्देश्य से।.

देखें भी

 हिन्दी