परिचय

ईमेल संदेशों को प्रोग्रामेटिक रूप से पार्स करना अभिलेखीय टूल्स, अनुपालन पाइपलाइनों, और माइग्रेशन यूटिलिटीज़ के लिए एक सामान्य आवश्यकता है। Outlook MSG फ़ाइलें कंपाउंड फ़ाइल बाइनरी (CFB) कंटेनर फ़ॉर्मेट का उपयोग करती हैं जिसमें MAPI प्रॉपर्टी स्ट्रीम्स होते हैं, जबकि EML फ़ाइलें MIME मानक का पालन करती हैं। दोनों फ़ॉर्मेट को एन्कोडिंग, फोल्डेड हेडर, और नेस्टेड अटैचमेंट्स के सावधानीपूर्वक प्रबंधन की आवश्यकता होती है।

Aspose.Email FOSS .NET के लिए एक मुफ्त, MIT-लाइसेंस वाला C# लाइब्रेरी है जो MSG और EML संदेशों के लिए पूर्ण रीड-राइट API प्रदान करती है। यह .NET 8.0+ को लक्षित करती है और Microsoft Outlook या किसी भी नेटिव COM इंटरऑप लेयर पर कोई निर्भरता नहीं रखती। लाइब्रेरी aspose.email.foss NuGet पैकेज के रूप में उपलब्ध है।

यह पोस्ट लाइब्रेरी में शामिल संदेश-पार्सिंग क्षमताओं को दर्शाती है, डिस्क से फ़ाइलें लोड करने से लेकर व्यक्तिगत MAPI प्रॉपर्टीज़ निकालने और फ़ॉर्मेट्स के बीच रूपांतरण करने तक।


क्या शामिल है

MSG फ़ाइलें लोड करना

MapiMessage क्लास Outlook MSG फ़ाइलों के साथ काम करने के लिए मुख्य प्रवेश बिंदु है। आप फ़ाइल पथ या स्ट्रीम से संदेश लोड कर सकते हैं, साथ ही एक वैकल्पिक स्ट्रिक्ट-वैलिडेशन फ़्लैग जो फ़ाइल में पाए गए किसी भी संरचनात्मक मुद्दे को उजागर करता है।

// Load an MSG file from disk
var message = MapiMessage.FromFile("meeting-invite.msg");

Console.WriteLine($"Subject: {message.Subject}");
Console.WriteLine($"From: {message.SenderName} <{message.SenderEmailAddress}>");
Console.WriteLine($"Date: {message.MessageDeliveryTime}");
Console.WriteLine($"Recipients: {message.Recipients.Count}");
Console.WriteLine($"Attachments: {message.Attachments.Count}");

वापसी किया गया MapiMessage सामान्य फ़ील्ड्स के लिए टाइप्ड प्रॉपर्टीज़ उजागर करता है, जिसमें Subject, Body, HtmlBody, SenderName, SenderEmailAddress, InternetMessageId और MessageDeliveryTime शामिल हैं।

EML संदेश लोड करना

EML फ़ाइलें MIME फ़ॉर्मेट का उपयोग करती हैं। MapiMessage.LoadFromEml एक फ़ाइल पथ, एक Stream, या एक byte[] स्वीकार करती है और वही MapiMessage ऑब्जेक्ट वापस करती है, इसलिए आप स्रोत फ़ॉर्मेट की परवाह किए बिना एक एकीकृत API का उपयोग करते हैं।

// Load from a file path
var fromFile = MapiMessage.LoadFromEml("newsletter.eml");

// Load from a stream
using var stream = File.OpenRead("newsletter.eml");
var fromStream = MapiMessage.LoadFromEml(stream);

Console.WriteLine($"Subject: {fromStream.Subject}");
Console.WriteLine($"Body: {fromStream.Body?.Trim()}");

पार्सर फोल्डेड हेडर्स, Base64 और quoted-printable ट्रांसफर एन्कोडिंग्स, तथा मल्टी-रिसिपिएंट To/Cc फ़ील्ड्स को संभालता है।

प्राप्तकर्ताओं और अटैचमेंट्स के साथ काम करना

जब संदेश लोड हो जाता है, तो प्राप्तकर्ता और अटैचमेंट्स मजबूत टाइप्ड कलेक्शन्स के रूप में उपलब्ध होते हैं। प्रत्येक MapiRecipient में EmailAddress, DisplayName, और RecipientType फ़ील्ड्स होते हैं। प्रत्येक MapiAttachment Filename, Data, MimeType, और ContentId प्रदान करता है।

var message = MapiMessage.FromFile("report.msg");

foreach (var recipient in message.Recipients)
{
    Console.WriteLine($"  {recipient.DisplayName} <{recipient.EmailAddress}> (type={recipient.RecipientType})");
}

foreach (var attachment in message.Attachments)
{
    Console.WriteLine($"  {attachment.Filename} ({attachment.MimeType}, {attachment.Data.Length} bytes)");
    File.WriteAllBytes(attachment.Filename!, attachment.Data);
}

एंबेडेड संदेश अटैचमेंट्स भी समर्थित हैं। जब MapiAttachment.IsEmbeddedMessage true होता है, तो EmbeddedMessage प्रॉपर्टी एक नेस्टेड MapiMessage वापस करती है जिसे आप पुनरावर्ती रूप से जांच सकते हैं।

MAPI प्रॉपर्टीज़ तक पहुँचना

उन्नत परिदृश्यों के लिए, प्रत्येक संदेश, प्राप्तकर्ता, और अटैचमेंट Properties संग्रह को प्रकार MapiPropertyCollection के रूप में उजागर करता है। आप व्यक्तिगत MAPI गुणों को उनके प्रॉपर्टी ID और टाइप कोड द्वारा पढ़, जोड़ और हटा सकते हैं।

var message = MapiMessage.FromFile("custom-props.msg");

// Iterate all properties on the message
foreach (var prop in message.Properties.IterProperties())
{
    Console.WriteLine($"Tag: 0x{prop.PropertyTag:X8}, Value: {prop.Value}");
}

// Read a specific property
var subject = message.Properties.Get(
    (ushort)CommonMessagePropertyId.Subject,
    (ushort)PropertyTypeCode.PtypString);

CommonMessagePropertyId enum कोर संदेश अर्थ, बॉडी फ़ील्ड्स, ट्रांसपोर्ट हेडर्स, और अटैचमेंट मेटाडाटा के लिए ज्ञात MAPI प्रॉपर्टी पहचानकर्ताओं को परिभाषित करता है।

MSG और EML के बीच रूपांतरण

एक पार्स किया गया संदेश को वापस किसी भी फ़ॉर्मेट में सहेजा जा सकता है। Save() MSG बाइट्स लिखता है, जबकि SaveToEml() MIME आउटपुट उत्पन्न करता है। यह फ़ॉर्मेट रूपांतरण को सरल बनाता है।

// Load an EML and save as MSG
var message = MapiMessage.LoadFromEml("incoming.eml");
message.Save("converted.msg");

// Load an MSG and save as EML
var msg = MapiMessage.FromFile("outgoing.msg");
msg.SaveToEml("exported.eml");

दोनों विधियां Stream पैरामीटर को भी स्वीकार करती हैं जिससे फ़ाइल सिस्टम को छुए बिना इन-मेमोरी प्रोसेसिंग की जा सके।


त्वरित प्रारंभ

NuGet से पैकेज इंस्टॉल करें:

dotnet add package Aspose.Email.FOSS

फिर अपनी पहली संदेश को पार्स करें:

using Aspose.Email.Foss.Msg;

// Load an MSG file
var message = MapiMessage.FromFile("sample.msg");

Console.WriteLine($"Subject:     {message.Subject}");
Console.WriteLine($"From:        {message.SenderName} <{message.SenderEmailAddress}>");
Console.WriteLine($"Date:        {message.MessageDeliveryTime}");
Console.WriteLine($"Body length: {message.Body?.Length ?? 0} chars");

// List attachments
foreach (var att in message.Attachments)
    Console.WriteLine($"  Attachment: {att.Filename} ({att.Data.Length} bytes)");

// Convert to EML
message.SaveToEml("sample.eml");
Console.WriteLine("Saved as EML.");

समर्थित प्रारूप

फ़ॉर्मेटएक्सटेंशनपढ़ेंलिखें
Outlook MSG.msgहांहां
MIME (EML).emlहाँहाँ
समग्र फ़ाइल बाइनरी.cfbहाँहाँ

ओपन सोर्स और लाइसेंसिंग

Aspose.Email FOSS for .NET को MIT लाइसेंस के तहत जारी किया गया है। पूर्ण सोर्स कोड GitHub पर उपलब्ध है aspose-email-foss/Aspose.Email-FOSS-for-.Net पर। योगदान, समस्याएं, और पुल अनुरोध स्वागत योग्य हैं।


शुरू करना

  • डेवलपर गाइड — विस्तृत दस्तावेज़ीकरण और चरण-दर-चरण मार्गदर्शन
  • नॉलेज बेस — अक्सर पूछे जाने वाले प्रश्न और कैसे-करें लेख
  • API Reference — पूर्ण क्लास और मेथड रेफ़रेंस

संबंधित संसाधन