الخصائص والوظائف

الخصائص والوظائف

الخصائص والوظائف

هذه الصفحة تغطي كل ميزة رئيسية من 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);

استخدام strict: false لترتيب غير قياسي من ملفات MSG:

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 التحويلات

تحميل RFC 5322 .eml الملفات في A MapiMessage لتخزين Outlook متوافق:

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);

تحويلها إلى EML من ملف MSG:

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 الوصول إلى الحاويات

يتم بناء ملفات Outlook MSG على تنسيق الملفات الثنائية (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 غير القياسي
  • وَالْمُتَّقِينَ strict المعلمات في FromFile() / FromStream() التحكم في التسامح عن الأخطاء - استخدام strict: false - لقطع الملفات من أنظمة أطراف ثالثة
  • MapiMessage.Create() تنتج رسائل Unicode-string حسب الافتراض؛ إعداد unicodeStrings: false التراث ANSI متوافق مع
  • SaveToEml() بدون حجة يعود byte[] - مريح لعملية الذاكرة داخل الخصم

القضايا المشتركة

مسألةسببتصحيح
CfbException عند تحميللا ملف CFB / MSG صالحتحقق من أن الملف هو Outlook MSG
الفراغ Body بعد تحميلالكائنات التي يتم تخزينها في HTML فقطالتحقق message.HtmlBody بدلاً من ذلك
نموذج المستقبل ثابت غير موجودلا نوع مستقلاستخدام MapiMessage.RecipientTypeTo, MapiMessage.RecipientTypeCc,أو MapiMessage.RecipientTypeBcc
0 attachments after LoadFromEmlإيميل لا Content-Disposition: attachment أجزاءتظهر أجزاء داخلية (محتوى-ID فقط) أيضًا في Attachments

إشارة API

الفصول الدراسيةوصف
MapiMessageأعلى مستوى MSG رسالة التمثيل
MapiAttachmentإرسال رسالة أو رسائل مكتوبة على A MapiMessage
MapiRecipientالمقاييس على A MapiMessage
MapiPropertyخريطة الوصول الممتلكات
MapiPropertyCollectionحقيبة مأوى مابين
CommonMessagePropertyIdمجموعة من معرفات الممتلكات القياسية MAPI
MsgReaderقارئ MSG الهيكل منخفض المستوى
MsgWriterكتابة MSG المنخفض المستوى
CfbReaderCFB حاوية قارئ
CfbWriterCFB الكاتب حاوية ثنائية
CfbDocumentوثيقة CFB في الذاكرة للبناء
CfbStorageالنقاط التخزينية في وثيقة CFB
CfbStreamالنقاط التي تدفق في وثيقة CFB
 العربية