विशेषताएँ और कार्यात्मकताएँ

विशेषताएँ और कार्यात्मकताएँ

विशेषताएँ और कार्यात्मकताएँ

यह पृष्ठ Aspose.Email FOSS for .NET की हर प्रमुख सुविधा को कार्यशील C# उदाहरणों के साथ कवर करता है।


MSG फ़ाइलें पढ़ना

एक पथ या स्ट्रीम से MSG फ़ाइल लोड करें और उसकी सभी गुणों तक पहुँचें:

using System.IO;
using Aspose.Email.Foss.Msg;

using var stream = File.OpenRead("message.msg");
var message = MapiMessage.FromStream(stream);

Console.WriteLine(message.Subject);
Console.WriteLine(message.Body);
Console.WriteLine(message.HtmlBody);
Console.WriteLine(message.SenderName);
Console.WriteLine(message.SenderEmailAddress);
Console.WriteLine(message.MessageDeliveryTime);
Console.WriteLine(message.InternetMessageId);

गैर-मानक MSG फ़ाइलों के लचीले पार्सिंग के लिए strict: false का उपयोग करें:

var message = MapiMessage.FromFile("message.msg", strict: false);

ValidationIssues को जांचें ताकि आप बिना त्रुटि फेंके किसी भी फ़ॉर्मेट चेतावनियों की समीक्षा कर सकें:

foreach (var issue in message.ValidationIssues)
    Console.WriteLine($"Warning: {issue}");

MSG फ़ाइलें बनाना

MapiMessage.Create() के साथ एक पूर्ण ईमेल बनाएं और Save() के साथ सीरियलाइज़ करें:

using System.IO;
using Aspose.Email.Foss.Msg;

var message = MapiMessage.Create("Hello", "Body");
message.SenderName = "Alice";
message.SenderEmailAddress = "alice@example.com";
message.HtmlBody = "<p>Body</p>";
message.InternetMessageId = "<hello@example.com>";
message.MessageDeliveryTime = new DateTime(2024, 1, 2, 3, 4, 5, DateTimeKind.Utc);

message.AddRecipient("bob@example.com", "Bob");

using var output = File.Create("hello.msg");
message.Save(output);

Save() बिना तर्कों के एक byte[] लौटाता है। Save(path) सीधे फ़ाइल पथ पर लिखता है।


प्राप्तकर्ता

To, Cc, और Bcc प्राप्तकर्ताओं को AddRecipient() के साथ जोड़ें:

message.AddRecipient("alice@example.com", "Alice");
message.AddRecipient("bob@example.com", "Bob", MapiMessage.RecipientTypeCc);
message.AddRecipient("carol@example.com", "Carol", MapiMessage.RecipientTypeBcc);

लोड किए गए संदेश से प्राप्तकर्ताओं को इटररेट करें:

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

संलग्नक

फ़ाइल या स्ट्रीम अटैचमेंट्स को मेटाडेटा के साथ जोड़ें:

// From byte array
message.AddAttachment("report.pdf", pdfBytes, "application/pdf");

// From stream
using var attachStream = File.OpenRead("photo.png");
message.AddAttachment("photo.png", attachStream, "image/png");

// Inline image with Content-ID
message.AddAttachment("logo.png", logoBytes, "image/png", contentId: "logo@cid");

लोड किए गए संदेश से अटैचमेंट पढ़ें:

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

एम्बेडेड संदेश संलग्नक

एक MapiMessage को दूसरे के अंदर संलग्न करें — फ़ॉरवर्ड किए गए ईमेल श्रृंखलाओं में सामान्य:

using Aspose.Email.Foss.Msg;

var parent = MapiMessage.Create("Outer", "Parent body");
var child = MapiMessage.Create("Inner", "Child body");
child.SenderEmailAddress = "inner@example.com";
parent.AddEmbeddedMessageAttachment(child, "inner.msg");

parent.Save("outer.msg");

संलग्न संदेश अटैचमेंट पढ़ें:

var loaded = MapiMessage.FromFile("outer.msg");
foreach (var attachment in loaded.Attachments)
{
    if (attachment.IsEmbeddedMessage)
    {
        Console.WriteLine($"Embedded: {attachment.EmbeddedMessage!.Subject}");
    }
}

EML और MIME रूपांतरण

Outlook‑संगत संग्रहण के लिए एक RFC 5322 .eml फ़ाइल को MapiMessage में लोड करें:

using System.IO;
using Aspose.Email.Foss.Msg;

using var input = File.OpenRead("message.eml");
var message = MapiMessage.LoadFromEml(input);

using var msgOutput = File.Create("message.msg");
message.Save(msgOutput);

एक MSG फ़ाइल से EML में वापस परिवर्तित करें:

var message = MapiMessage.FromFile("message.msg");
using var emlOutput = File.Create("roundtrip.eml");
message.SaveToEml(emlOutput);

LoadFromEml() एक string पथ या byte[] को भी स्वीकार करता है। SaveToEml() बिना तर्कों के एक byte[] लौटाता है। विषय, बॉडी, HTML बॉडी, प्रेषक, प्राप्तकर्ता, और सभी अटैचमेंट (Content-ID के साथ इनलाइन इमेज सहित) पूर्ण EML ↔ MSG राउंड‑ट्रिप्स के दौरान संरक्षित रहते हैं।


MAPI प्रॉपर्टी एक्सेस

MapiPropertyCollection MAPI गुणों तक टाइप्ड एक्सेस प्रदान करता है SetProperty() और GetPropertyValue() के माध्यम से। मानक गुणों के लिए CommonMessagePropertyId enum मानों का उपयोग करें:

using Aspose.Email.Foss.Msg;

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

// Named convenience properties
Console.WriteLine(message.Subject);
Console.WriteLine(message.SenderName);
Console.WriteLine(message.MessageDeliveryTime);

// Iterate all MAPI property keys
foreach (var key in message.IterPropertyKeys())
    Console.WriteLine($"0x{(ushort)key.PropertyId:X4} / {key.PropertyType}");

CFB Container Access

Outlook MSG फ़ाइलें Compound File Binary (CFB) फ़ॉर्मेट पर निर्मित होती हैं। CfbReader निरीक्षण और डेटा निष्कर्षण के लिए पूरी डायरेक्टरी ट्री को उजागर करता है:

using System.Text;
using Aspose.Email.Foss.Cfb;

using var reader = CfbReader.FromFile("message.msg");

// Iterate all top-level children
foreach (var entry in reader.IterChildren(CfbConstants.RootStreamId))
    Console.WriteLine($"{(entry.IsStorage() ? "Storage" : "Stream")}: {entry.Name}");

// Navigate to a specific stream by path
var entry2 = reader.ResolvePath(["__substg1.0_0037001E"]);
if (entry2 is not null)
{
    var data = reader.GetStreamData(entry2.StreamId);
    Console.WriteLine(Encoding.Unicode.GetString(data));
}

शुरू से एक CFB दस्तावेज़ बनाएं और उसे क्रमबद्ध करें CfbWriter के साथ:

using System.Text;
using Aspose.Email.Foss.Cfb;

var document = new CfbDocument();
document.Root.AddStream(new CfbStream("Notes", Encoding.UTF8.GetBytes("hello")));
var storage = document.Root.AddStorage(new CfbStorage("DataStore"));
storage.AddStream(new CfbStream("Payload", Encoding.UTF8.GetBytes("content")));

byte[] bytes = CfbWriter.ToBytes(document);
File.WriteAllBytes("output.cfb", bytes);

टिप्स और सर्वोत्तम प्रथाएँ

  • using या Dispose() को MapiMessage और CfbReader पर उपयोग करें ताकि फ़ाइल हैंडल रिलीज़ हो सकें
  • लोड करने के बाद message.ValidationIssues जांचें ताकि गैर‑मानक MSG फ़ॉर्मेटिंग का पता चल सके
  • FromFile() / FromStream() में strict पैरामीटर त्रुटि सहनशीलता को नियंत्रित करता है — तृतीय‑पक्ष सिस्टम की फ़ाइलों के लचीले पार्सिंग के लिए strict: false उपयोग करें
  • डिफ़ॉल्ट रूप से MapiMessage.Create() यूनिकोड‑स्ट्रिंग संदेश उत्पन्न करता है; लेगेसी ANSI संगतता के लिए unicodeStrings: false सेट करें
  • बिना तर्कों के SaveToEml() byte[] लौटाता है — इन‑मेमोरी वर्कफ़्लो के लिए सुविधाजनक

सामान्य समस्याएँ

समस्याकारणसमाधान
CfbException लोड करते समयमान्य CFB/MSG फ़ाइल नहीं हैसुनिश्चित करें कि फ़ाइल Outlook MSG है
लोड के बाद खाली Bodyबॉडी केवल HTML में संग्रहीत हैइसके बजाय message.HtmlBody जांचें
LoadFromEml के बाद 0 अटैचमेंटEML में Content-Disposition: attachment भाग नहीं हैंइनलाइन भाग (केवल Content-ID) भी Attachments में दिखाई देते हैं

API संदर्भ सारांश

क्लासविवरण
MapiMessageउच्च-स्तरीय MSG संदेश प्रतिनिधित्व
MapiAttachmentMapiMessage पर संलग्नक या एम्बेडेड संदेश
MapiRecipientMapiMessage पर प्राप्तकर्ता
MapiPropertyएकल MAPI प्रॉपर्टी प्रविष्टि
MapiPropertyCollectionटाइप्ड MAPI प्रॉपर्टी बैग
CommonMessagePropertyIdमानक MAPI प्रॉपर्टी पहचानकर्ताओं का एनीम
MsgReaderनिम्न-स्तरीय MSG संरचना रीडर
MsgWriterनिम्न-स्तरीय MSG संरचना राइटर
CfbReaderCFB बाइनरी कंटेनर रीडर
CfbWriterCFB बाइनरी कंटेनर राइटर
CfbDocumentनिर्माण के लिए इन-मेमोरी CFB दस्तावेज़
CfbStorageCFB दस्तावेज़ में स्टोरेज नोड
CfbStreamCFB दस्तावेज़ में स्ट्रीम नोड
 हिन्दी