المقدمة

Aspose.Email FOSS for .NET هو مكتبة C# مرخصة بموجب MIT وخالية من الاعتمادات للعمل مع
ملفات Outlook MSG، وحاويات Compound File Binary (CFB)، ورسائل EML. تستعرض هذه المقالة
كل مجال رئيسي للميزات مع أمثلة شفرة عمل مأخوذة مباشرةً من مجموعة اختبارات المكتبة
— كل اسم فئة وتوقيع طريقة معروضين هنا تم التحقق منهما مقابل
source repository.

قم بالتثبيت بأمر واحد — لا Microsoft Outlook، لا COM interop، لا مكتبات أصلية:

dotnet add package Aspose.Email.Foss

الميزات الرئيسية

قراءة وفحص ملفات MSG

MapiMessage.FromStream() و MapiMessage.FromFile() يفتحان أي ملف .msg الخاص بـ Outlook و
يكشفان محتوياته الكاملة: الموضوع، نص الرسالة العادي، نص HTML، اسم المرسل، عنوان بريد المرسل
الإلكتروني، وقت التسليم، معرف الرسالة على الإنترنت، المستلمين، والمرفقات. لا يلزم تثبيت Outlook — تم تنفيذ طبقة MSG وCFB بالكامل في C# المدار.

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

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

Console.WriteLine(message.Subject);
Console.WriteLine(message.SenderEmailAddress);
Console.WriteLine(message.Body);

foreach (var recipient in message.Recipients)
    Console.WriteLine($"To: {recipient.EmailAddress}");

foreach (var attachment in message.Attachments)
    Console.WriteLine($"Attachment: {attachment.Filename} ({attachment.MimeType})");

إنشاء ملفات MSG من الصفر

MapiMessage.Create() يبني بريدًا إلكترونيًا كاملًا في الذاكرة. اضبط SenderName, SenderEmailAddress، HtmlBody، InternetMessageId، وMessageDeliveryTime ك خصائص بعد الإنشاء، ثم أضف المستلمين باستخدام AddRecipient() ومرفقات الملفات أو التدفق باستخدام AddAttachment(). سَلّس باستخدام message.Save() — يُعيد byte[] أو يكتب مباشرة إلى مسار أو Stream.

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");
message.AddAttachment("note.txt", "abc"u8.ToArray(), "text/plain");

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

تحويل EML إلى MSG (والعكس)

MapiMessage.LoadFromEml() يقبل مسار ملف، أو Stream، أو byte[] يحتوي على
رسالة RFC 5322 / MIME قياسية. يحافظ محلل MIME المدمج على الموضوع، النص العادي
نص HTML، المرسل، المستلمين، وجميع المرفقات — بما في ذلك الصور المضمنة مع
Content-ID رؤوس. SaveToEml() يسلسل مرة أخرى إلى MIME لتبادل كامل بين EML ↔ MSG
دون أي مكتبة MIME خارجية.

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

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

// Inspect fields parsed from MIME headers
Console.WriteLine(message.Subject);
Console.WriteLine(message.SenderEmailAddress);
Console.WriteLine(message.HtmlBody);

// Save as MSG for Outlook-compatible storage
using var msgOutput = File.Create("message.msg");
message.Save(msgOutput);

// Round-trip back to EML
using var emlOutput = File.Create("roundtrip.eml");
message.SaveToEml(emlOutput);

مرفقات الرسائل المدمجة

يمكن لملف MSG أن يحتوي على ملف MSG آخر كمرفق — نمط شائع في سلاسل البريد الإلكتروني المُعاد توجيهها. AddEmbeddedMessageAttachment() يرفق كائن MapiMessage كمرفق .msg متداخل. عند القراءة، MapiAttachment.IsEmbeddedMessage يشير إلى النوع المدمج و EmbeddedMessage يكشف عن MapiMessage المتداخل مباشرة.

using System.IO;
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");
var attachment = loaded.Attachments[0];

if (attachment.IsEmbeddedMessage)
    Console.WriteLine($"Embedded subject: {attachment.EmbeddedMessage!.Subject}");

قراءة وكتابة حاوية CFB

ملفات Outlook MSG مبنية على تنسيق Compound File Binary (CFB) — حاوية ثنائية هرمية تشبه نظام ملفات FAT. CfbReader تعرض شجرة الدليل الكاملة: تكرار التخزينات والتيارات باستخدام IterChildren()، الانتقال إلى إدخالات محددة عبر سلسلة المسار باستخدام ResolvePath()، وقراءة بايتات التيار الخام باستخدام GetStreamData(). CfbWriter.ToBytes() تسلسل CfbDocument إلى بايتات — مفيد لإنشاء مستندات CFB مخصصة أو للتحقق من جولات النقل بدون فقدان.

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

// Build a CFB document from scratch
var document = new CfbDocument();
document.Root.AddStream(new CfbStream("ReadMe", 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);

// Read it back
using var reader = new CfbReader(bytes);
var entry = reader.ResolvePath(["DataStore", "Payload"]);
if (entry is not null)
{
    var data = reader.GetStreamData(entry.StreamId);
    Console.WriteLine(Encoding.UTF8.GetString(data)); // "content"
}

الوصول إلى خاصية MAPI المكتوبة بنوع

MapiPropertyCollection يوفر وصولًا إلى خصائص MAPI ذات النوعية لأي كائن MSG أو تخزين.
تغطي تعداد CommonMessagePropertyId جميع معرفات خصائص MAPI القياسية — Subject،
Body، BodyHtml، SenderName، SenderEmailAddress، MessageDeliveryTime،
InternetMessageId، وخصائص المرفقات بما في ذلك AttachFilename، AttachMimeTag،
وAttachContentId. استخدم SetProperty() وGetPropertyValue() لقراءة وكتابة
خصائص عشوائية تتجاوز الحقول المريحة المسماة على MapiMessage.

using Aspose.Email.Foss.Msg;

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

// Typed 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}");

البدء السريع

dotnet add package Aspose.Email.Foss
using System.IO;
using Aspose.Email.Foss.Msg;

// Read an MSG file
using var stream = File.OpenRead("sample.msg");
var message = MapiMessage.FromStream(stream);
Console.WriteLine(message.Subject);
Console.WriteLine(message.SenderEmailAddress);
foreach (var recipient in message.Recipients)
    Console.WriteLine($"To: {recipient.EmailAddress}");
foreach (var attachment in message.Attachments)
    Console.WriteLine($"Attachment: {attachment.Filename} ({attachment.MimeType})");

الصيغ المدعومة

الصيغةالامتدادقراءةكتابة
Compound File Binary.cfb
Outlook Message.msg
MIME / EML.eml

المصدر المفتوح والترخيص

Aspose.Email FOSS for .NET تم إصداره تحت رخصة MIT. استخدمه بحرية في المشاريع الشخصية، التجارية ومفتوحة المصدر دون أي قيود على الاستخدام. الشيفرة المصدرية متاحة على github.com/aspose-email-foss/Aspose.Email-FOSS-for-.Net.


البدء