מבוא
Aspose.Email FOSS for .NET הוא ספרייה ב‑C# ללא תלות, ברישיון MIT, לעבודה עם
קבצי Outlook MSG, מכולות Compound File Binary (CFB) והודעות EML. פוסט זה מוביל דרך
בכל תחום תכונה מרכזי עם דוגמאות קוד עובדות שנלקחו ישירות ממערכת הבדיקה של הספרייה
— כל שם מחלקה וחתימת מתודה שמוצגים כאן מאומתים מול
מאגר המקור.
התקן עם פקודה אחת — ללא Microsoft Outlook, ללא COM interop, ללא ספריות מקומיות:
dotnet add package Aspose.Email.Foss
תכונות מרכזיות
קרא ובדוק קבצי MSG
MapiMessage.FromStream() ו-MapiMessage.FromFile() פותחים כל קובץ Outlook .msg ומחשפים את כל תוכנו: נושא, גוף בטקסט רגיל, גוף 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 סטנדרטית. ה‑parser המובנה של 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})");
פורמטים נתמכים
| פורמט | סיומת | קריאה | כתיבה |
|---|---|---|---|
| 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.