Aspose.Email FOSS for C++ के साथ शुरुआत कैसे करें
Aspose.Email FOSS for C++ एक लाइब्रेरी है जो Outlook MSG फ़ाइलें, EML संदेश, और CFB कंटेनर पढ़ने और लिखने के लिए प्रयोग होती है। इसमें कोई तृतीय-पक्ष निर्भरताएँ नहीं हैं और यह केवल C++17 कंपाइलर और CMake की आवश्यकता रखती है।
चरण 1 — क्लोन करें और अपने CMake प्रोजेक्ट में जोड़ें
git clone https://github.com/aspose-email-foss/Aspose.Email-FOSS-for-Cpp.gitलाइब्रेरी को एक सबडायरेक्टरी के रूप में जोड़ें और इसे अपने CMakeLists.txt में लिंक करें:
add_subdirectory(Aspose.Email-FOSS-for-Cpp)
target_link_libraries(your_target PRIVATE AsposeEmailFoss::AsposeEmailFoss)यह लाइब्रेरी केवल C++ मानक लाइब्रेरी का उपयोग करती है और इसमें कोई तृतीय-पक्ष निर्भरताएँ नहीं हैं। प्रोजेक्ट README में बताया गया है कि GCC 9+, Clang 10+, और MSVC 2019+ समर्थित हैं।
चरण 2 — एक MSG फ़ाइल पढ़ें
mapi_message हेडर को शामिल करें और mapi_message::from_stream() के साथ फ़ाइल खोलें:
#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::cout << "From: " << message.sender_email_address() << '\n';
std::cout << "Body: " << message.body() << '\n';
for (const auto& recipient : message.recipients())
std::cout << "To: " << recipient.email_address << '\n';
for (const auto& attachment : message.attachments())
std::cout << "Attachment: " << attachment.filename
<< " (" << attachment.mime_type << ")\n";
}mapi_message::from_stream() MSG फ़ाइल के CFB कंटेनर को पार्स करता है और सभी MAPI प्रॉपर्टीज़ को टाइप्ड एक्सेसर मेथड्स के माध्यम से उजागर करता है। Microsoft Outlook की कोई इंस्टॉलेशन आवश्यक नहीं है।
चरण 3 — एक नया MSG फ़ाइल बनाएं
mapi_message::create() का उपयोग करके मेमोरी में एक संदेश बनाएं, प्रेषक और प्राप्तकर्ता फ़ील्ड सेट करें, और save() के साथ डिस्क पर सहेजें:
#include <fstream>
#include "aspose/email/foss/msg/mapi_message.hpp"
int main()
{
auto message = aspose::email::foss::msg::mapi_message::create(
"Meeting Notes", "Please find the agenda attached.");
message.set_sender_name("Alice");
message.set_sender_email_address("alice@example.com");
message.add_recipient("bob@example.com", "Bob");
message.add_attachment(
"agenda.txt",
std::vector<std::uint8_t>{'I', 't', 'e', 'm', ' ', '1'},
"text/plain");
std::ofstream output("meeting_notes.msg", std::ios::binary);
message.save(output);
}mapi_message::create() एक इन-मेमोरी संदेश बनाता है। save() फ़ाइल पाथ, एक std::ostream, या कोई आर्गुमेंट नहीं (एक std::vector<std::uint8_t> लौटाते हुए) स्वीकार करता है।
चरण 4 — EML को MSG में बदलें (और वापस)
mapi_message::load_from_eml() के साथ एक EML फ़ाइल लोड करें, फिर save() के साथ MSG में सीरियलाइज़ करें। इस राउंड-ट्रिप में विषय, साधारण-टेक्स्ट बॉडी, HTML बॉडी प्रॉपर्टी, प्रेषक, प्राप्तकर्ता, और अटैचमेंट्स संरक्षित रहते हैं:
#include <filesystem>
#include <iostream>
#include "aspose/email/foss/msg/mapi_message.hpp"
int main()
{
// EML → MSG
auto message = aspose::email::foss::msg::mapi_message::load_from_eml(
std::filesystem::path("message.eml"));
std::cout << "Subject: " << message.subject() << '\n';
message.save(std::filesystem::path("converted.msg"));
// MSG → EML round-trip
auto loaded = aspose::email::foss::msg::mapi_message::from_file(
std::filesystem::path("converted.msg"));
loaded.save_to_eml(std::filesystem::path("roundtrip.eml"));
std::cout << "Saved converted.msg and roundtrip.eml\n";
}सामान्य समस्याएँ और समाधान
स्ट्रीम पर बाइनरी मोड सेट नहीं है। के साथ फ़ाइल खोलना std::ifstream input("file.msg") without std::ios::binary विंडोज़ लाइन-एंडिंग रूपांतरण का कारण बन सकता है जिससे CFB कंटेनर भ्रष्ट हो जाता है। पास करें std::ios::binary इनपुट और आउटपुट दोनों स्ट्रीमों के लिए।
लिंकर त्रुटि: AsposeEmailFoss::AsposeEmailFoss नहीं मिला। जाँचें कि add_subdirectory(Aspose.Email-FOSS-for-Cpp) से पहले दिखाई देता है target_link_libraries(...) आपके CMakeLists.txt, और यह सुनिश्चित करें कि उपडायरेक्टरी का नाम क्लोन किए गए फ़ोल्डर से बिल्कुल मेल खाता हो।
C++17 सक्षम नहीं है। लाइब्रेरी को C++17 सुविधाओं की आवश्यकता है। यदि कंपाइलर संरचित बाइंडिंग्स या std::filesystem, जोड़ें set(CMAKE_CXX_STANDARD 17) अपने शीर्ष पर CMakeLists.txt से पहले add_subdirectory कॉल।
पढ़ने के बाद खाली विषय या बॉडी। कुछ MSG फ़ाइलें टेक्स्ट को यूनीकोड प्रॉपर्टीज़ में संग्रहीत करती हैं जबकि अन्य एएनएसआई कोड-पेज प्रॉपर्टीज़ का उपयोग करती हैं। message.subject() and message.body() वह स्ट्रिंग लौटाएँ जो उपलब्ध किसी भी स्टोरेज से हो; जाँचें message.html_body() if message.body() खाली है।
load_from_eml विकृत EML पर थ्रो करता है। पुष्टि करें कि EML फ़ाइल RFC 5322 लाइन समाप्तियों (CRLF) का उपयोग करती है और वैध MIME हेडर रखती है। लाइब्रेरी बिना सूचना के विकृत हेडर को नहीं छोड़ती।
अक्सर पूछे जाने वाले प्रश्न
क्या लाइब्रेरी को Microsoft Outlook या किसी COM घटक की आवश्यकता है?
नहीं। Aspose.Email C++ के लिए FOSS अपना स्वयं का CFB और MAPI पार्सर उपयोग करता है और इसकी कोई थर्ड-पार्टी निर्भरताएँ नहीं हैं। यह Linux, macOS, और Windows पर Outlook स्थापित किए बिना काम करता है।
मैं कौन-से फ़ॉर्मेट पढ़ और लिख सकता हूँ?
MSG (Outlook Message), EML (RFC 5322 / MIME), और CFB (Compound File Binary) पढ़ने और लिखने दोनों के लिए समर्थित हैं। TNEF (winmail.dat), IMAP, SMTP, और POP3 समर्थित नहीं हैं।
फ़ाइल के बजाय संदेश को बाइट्स में कैसे सहेजूँ?
बिना किसी आर्ग्यूमेंट के save() या save_to_eml() को कॉल करें। दोनों std::vector<std::uint8_t> लौटाते हैं, जिसे आप किसी भी बफ़र या स्ट्रीम में लिख सकते हैं।
कौन सा C++ मानक आवश्यक है?
C++17। लाइब्रेरी std::filesystem, std::optional और अन्य C++17 स्टैंडर्ड-लाइब्रेरी सुविधाओं का उपयोग करती है। GCC 9+, Clang 10+, और MSVC 2019+ को प्रोजेक्ट README में समर्थित बताया गया है।
क्या कोई पैकेज मैनेजर रिलीज़ (vcpkg, Conan) उपलब्ध है?
संस्करण 0.1.0 केवल स्रोत के माध्यम से वितरित किया जाता है। रिपॉज़िटरी को क्लोन करें और ऊपर दिखाए अनुसार add_subdirectory का उपयोग करें। भविष्य के रिलीज़ में पैकेज मैनेजर मैनिफेस्ट जोड़े जा सकते हैं।