C++ में MSG फ़ाइल कैसे पढ़ें

C++ में MSG फ़ाइल कैसे पढ़ें

Aspose.Email FOSS for C++ lets you open and parse Outlook MSG files with a single कॉल फ़ंक्शन।. mapi_message::from_file() और mapi_message::from_stream() लोड करें पूर्ण संदेश - विषय, शरीर, भेजने वाले, प्राप्तकर्ताओं और अप्लाईमेंट्स - एक in-memory में कोई Outlook या COM निर्भरता के साथ वस्तु।.

चरण 1 - परियोजना को स्थापित करें

रिकॉर्डर को क्लोन करें और इसे अपने CMakeLists.txt:

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 - हेडर शामिल करें

#include "aspose/email/foss/msg/mapi_message.hpp"

इस एकल हेडर्स को प्रदान किया जाता है mapi_message सभी समर्थनकर्ताओं को इस प्रकार के aspose::email::foss::msg नाम का अंतरिक्ष।.


चरण 3 — एक फ़ाइल पथ से संदेश लोड करें

उपयोग करें mapi_message::from_file() जब आपके पास एक std::filesystem::path:

#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"));

    std::cout << "Subject: " << message.subject() << '\n';
    std::cout << "From:    " << message.sender_name()
              << " <" << message.sender_email_address() << ">\n";
    std::cout << "Body:    " << message.body() << '\n';
}

चरण 4 — एक स्ट्रीम से संदेश लोड करें

उपयोग करें mapi_message::from_stream() किसी से भी पेरिस std::istream उपयोगी के लिए MSG डेटा को एक नेटवर्क या एक मेमोरी बफर से प्राप्त करना:

#include <fstream>
#include <iostream>
#include "aspose/email/foss/msg/mapi_message.hpp"

int main()
{
    std::ifstream input("sample.msg", std::ios::binary);
    auto message = aspose::email::foss::msg::mapi_message::from_stream(input);

    std::cout << "Subject: " << message.subject() << '\n';
}

हमेशा के साथ प्रवाह खोलना std::ios::binary Windows लाइन समाप्त करने से रोकने के लिए CFB कंटेनर को भ्रष्ट करने से अनुवाद।.


चरण 5 - रिसेप्टर्स को पुन: प्राप्त करें

message.recipients() वापस आओ A std::vector उपभोक्ताओं के साथ, प्रत्येक display_name, email_address,और recipient_type क्षेत्रों :

#include <fstream>
#include <iostream>
#include "aspose/email/foss/msg/mapi_message.hpp"

int main()
{
    std::ifstream input("sample.msg", std::ios::binary);
    auto message = aspose::email::foss::msg::mapi_message::from_stream(input);

    for (std::size_t i = 0; i < message.recipients().size(); ++i)
    {
        const auto& r = message.recipients()[i];
        std::cout << "[" << (i + 1) << "] "
                  << r.display_name << " <" << r.email_address << ">"
                  << " type=" << r.recipient_type << '\n';
    }
}

चरण 6 - Iterate attachments (अनुलग्नकों को पुन: स्थापित करें)

message.attachments() वापस आओ A std::vector हर एक के लिए, प्रत्येक का उपयोग करें। प्रदर्शनी filename, mime_type, data (अगर यह बूथों का है, content_id,और यह is_embedded_message() प्रार्थना करें:

#include <fstream>
#include <iostream>
#include "aspose/email/foss/msg/mapi_message.hpp"

int main()
{
    std::ifstream input("sample.msg", std::ios::binary);
    auto message = aspose::email::foss::msg::mapi_message::from_stream(input);

    for (std::size_t i = 0; i < message.attachments().size(); ++i)
    {
        const auto& a = message.attachments()[i];
        std::cout << "[" << (i + 1) << "] "
                  << a.filename << "  mime=" << a.mime_type
                  << "  bytes=" << a.data.size()
                  << "  embedded=" << (a.is_embedded_message() ? "yes" : "no")
                  << '\n';
    }
}

सामान्य समस्याएँ और समाधान

खाली body() लोड करने के बाद।. कुछ संदेश केवल HTML बॉडी में पाठ को संग्रहीत करते हैं संपत्ति की जांच करें message.html_body() जब message.body() एक खाली पंक्ति वापस करें।.

बिना रुके खोलने की रोशनी std::ios::binary. Windows पर, पाठ मोड स्ट्रीमिंग अनुवाद करें CRLF अनुक्रम, चुपचाप बाइनरी CFB डेटा को भ्रष्ट. हमेशा MSG फ़ाइलों को खोलें std::ios::binary.

msg_exception एक वैध दिखने वाले फ़ाइल के लिए फेंक दिया गया है।. जांच करें कि फ़ाइल एक असली है MSG (OLE Compound File) कुछ निर्यात उपकरणों द्वारा सहेजे गए फ़ाइल साधारण पाठ या MIME हो सकते हैं और नहीं हो सकता है पारित mapi_message::from_file().

recipients() एक खाली वेंक्टर को वापस करता है।. पुराने MSG फ़ाइल कभी-कभी रिसेप्टर को छोड़ देते हैं टेबल पर, लेकिन स्टोर में डिस्प्ले रिसेप्टर्स display_to अतः यह संभव है कि आप उस पर पहुंचें। message.get_property_value() के साथ common_message_property_id::display_to और property_type_code::ptyp_string.

मेमोरी में बड़ी संख्या में डेटा शामिल हैं।. केmapi_message::from_file() और from_stream() सभी संदेशों को डाउनलोड करें. बड़े फ़ाइलों के लिए, खोलें एक कंटेनर के साथ msg_reader बिना किसी निगरानी के नकली फसलों को भी लगाएं उन्हें भौतिकी देना।.

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

क्या है अंतर के बीच from_file() और from_stream()?

दोनों एक समान उत्पाद बनाते हैं। mapi_message वस्तु है।. from_file() स्वीकार करें A std::filesystem::path फ़ाइल को आंतरिक रूप से खोलें।. from_stream() पढ़े से किसी std::istream आप प्रदान करते हैं - उपयोगी जब MSG डेटा पहले से ही स्मृति में है या एक सॉकेट पर पहुंचने के लिए।.

करता है from_file() लोड करने के बाद फ़ाइल खोलें?

नहीं. फ़ाइल खुलती है, पूरी तरह से स्मृति में पेंच की जाती है और इससे पहले बंद होती है from_file() आप कॉल के तुरंत बाद स्रोत फ़ाइल को स्थानांतरित या हटा सकते हैं।.

क्या मैं macOS या Linux पर Outlook द्वारा बनाई गई MSG फ़ाइलों को पढ़ सकता हूं?

MSG प्रारूप (OLE Compound File + MAPI गुण) पर पोर्टेबल है ऑपरेटिंग सिस्टम: किसी भी .msg Outlook के किसी भी संस्करण द्वारा बनाए गए फ़ाइल को खोला जा सकता है के साथ mapi_message::from_file().

HTML शरीर को कैसे पढ़ा जाए?

कॉल करें message.html_body().यदि संदेश केवल एक साधारण पाठ शरीर के साथ बनाया गया था, यह एक खाली पंक्ति वापस देता है।. message.body() स्पष्ट पाठ शरीर को वापस करें।.

क्या सख्त मोड डिफ़ॉल्ट है?

mapi_message::from_file(path, strict) और from_stream(stream, strict) स्वीकार करें एक विकल्प strict बूथ: यह डिज़ाइन है false,जो छोटे से संरचनात्मक रूप से संतुलित है असली दुनिया में फ़ाइलों की लत.

संबंधित देखें

 हिन्दी