مقدمه

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 یا ذخیره‌سازی فراهم می‌کند.
enum 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})");

فرمت‌های پشتیبانی‌شده

قالبپسوندخواندننوشتن
فایل ترکیبی باینری.cfb
پیام Outlook.msg
MIME / EML.eml

منبع باز و مجوزدهی

Aspose.Email FOSS برای .NET تحت مجوز MIT منتشر شده است. از آن به‌صورت آزاد در پروژه‌های شخصی، تجاری و منبع باز بدون هیچ محدودیتی استفاده کنید. کد منبع در دسترس است در github.com/aspose-email-foss/Aspose.Email-FOSS-for-.Net.


شروع کار