תכונות ופונקציונליות

תכונות ופונקציונליות

תכונות ופונקציונליות

דף זה מכסה כל תכונה מרכזית של 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 לתוך 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(). השתמשו בערכי enum של CommonMessagePropertyId עבור מאפיינים סטנדרטיים:

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 נבנים על פורמט 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 לא סטנדרטי
  • הפרמטר strict בFromFile() / FromStream() שולט בסיבולת השגיאות — השתמש בstrict: false לניתוח רפוי של קבצים ממערכות צד שלישי
  • MapiMessage.Create() מייצר הודעות במחרוזות Unicode כברירת מחדל; הגדר את unicodeStrings: false לתאימות עם ANSI ישן
  • SaveToEml() ללא ארגומנטים מחזיר byte[] — נוח לתהליכי עבודה בזיכרון

בעיות נפוצות

IssueCauseFix
CfbException בעת הטעינהקובץ CFB/MSG אינו תקףודא שהקובץ הוא Outlook MSG
Body ריק לאחר הטעינההגוף נשמר רק ב‑HTMLבדוק message.HtmlBody במקום זאת
0 קבצים מצורפים לאחר LoadFromEmlל‑EML אין חלקי Content-Disposition: attachmentחלקים משולבים (Content-ID בלבד) גם מופיעים בAttachments

סיכום תיעוד API

ClassDescription
MapiMessageייצוג הודעת MSG ברמה גבוהה
MapiAttachmentקובץ מצורף או הודעה משובצת על MapiMessage
MapiRecipientנמען על MapiMessage
MapiPropertyערך יחיד של מאפיין MAPI
MapiPropertyCollectionחבילה טיפוסית של מאפייני MAPI
CommonMessagePropertyIdמניין של מזהי מאפייני MAPI סטנדרטיים
MsgReaderקורא מבנה MSG ברמה נמוכה
MsgWriterכותב מבנה MSG ברמה נמוכה
CfbReaderקורא מכולה בינארית CFB
CfbWriterכותב מכולה בינארית CFB
CfbDocumentמסמך CFB בזיכרון לבנייה
CfbStorageצומת אחסון במסמך CFB
CfbStreamצומת זרם במסמך CFB
 עברית