Pengenalan
Aspose.Email FOSS untuk .NET ialah perpustakaan C# berlesen MIT, bebas kebergantungan, untuk bekerja dengan
fail Outlook MSG, kontena Compound File Binary (CFB), dan mesej EML. Pos ini mengulas
setiap kawasan ciri utama dengan contoh kod yang berfungsi yang diambil terus daripada suite ujian perpustakaan
— setiap nama kelas dan tandatangan kaedah yang ditunjukkan di sini disahkan terhadap
source repository.
Pasang dengan satu arahan — tiada Microsoft Outlook, tiada interop COM, tiada perpustakaan asli:
dotnet add package Aspose.Email.Foss
Ciri-ciri Utama
Baca dan Periksa Fail MSG
MapiMessage.FromStream() dan MapiMessage.FromFile() membuka sebarang fail Outlook .msg dan
menunjukkan keseluruhan kandungannya: subjek, badan teks biasa, badan HTML, nama penghantar, alamat e‑mel
penghantar, masa penghantaran, ID mesej internet, penerima, dan lampiran. Tiada pemasangan Outlook
diperlukan — keseluruhan lapisan MSG dan CFB dilaksanakan dalam C# terurus.
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})");
Cipta Fail MSG dari Awal
MapiMessage.Create() membina e‑mel lengkap dalam memori. Tetapkan SenderName,SenderEmailAddress, HtmlBody, InternetMessageId, dan MessageDeliveryTime sebagai
sifat selepas penciptaan, kemudian tambahkan penerima dengan AddRecipient() dan lampiran fail atau aliran dengan AddAttachment(). Serialkan dengan message.Save() — mengembalikan byte[] atau menulis terus ke laluan atau 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);
Tukar EML kepada MSG (dan Kembali)
MapiMessage.LoadFromEml() menerima laluan fail, Stream, atau byte[] yang mengandungi
mesej standard RFC 5322 / MIME. Pengurai MIME terbina dalam mengekalkan subjek, teks
biasa, badan HTML, penghantar, penerima, dan semua lampiran — termasuk imej inline denganContent-ID tajuk. SaveToEml() menserialkan kembali ke MIME untuk perjalanan pusingan penuh EML ↔ MSG
tanpa sebarang perpustakaan MIME luaran.
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);
Lampiran Mesej Terbenam
Fail MSG boleh mengandungi fail MSG lain sebagai lampiran — corak biasa dalam rantaian e‑mel yang diteruskan. AddEmbeddedMessageAttachment() melampirkan objek MapiMessage sebagai lampiran .msg bersarang. Apabila membaca, MapiAttachment.IsEmbeddedMessage menandakan jenis terbenam dan EmbeddedMessage mendedahkan MapiMessage bersarang secara langsung.
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}");
Baca dan Tulis Kontena CFB
Fail Outlook MSG dibina atas format Compound File Binary (CFB) — sebuah kontena binari berhierarki yang serupa dengan sistem fail FAT. CfbReader memaparkan keseluruhan pokok direktori: ulang storages dan streams dengan IterChildren(), navigasi ke entri khusus melalui rantaian laluan dengan ResolvePath(), dan baca bait stream mentah dengan GetStreamData(). CfbWriter.ToBytes() menserialkan sebuah CfbDocument kepada bait — berguna untuk membina dokumen CFB tersuai atau mengesahkan perjalanan pusingan tanpa kehilangan.
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"
}
Akses Harta MAPI Bertipe
MapiPropertyCollection menyediakan akses sifat MAPI berjenis untuk mana-mana objek MSG atau storan.
The CommonMessagePropertyId enum meliputi semua pengecam sifat MAPI standard — Subject,Body, BodyHtml, SenderName, SenderEmailAddress, MessageDeliveryTime,InternetMessageId, dan sifat lampiran termasuk AttachFilename, AttachMimeTag,
dan AttachContentId. Gunakan SetProperty() dan GetPropertyValue() untuk membaca dan menulis
sifat sewenang-wenangnya di luar medan kemudahan yang dinamakan pada 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}");
Permulaan Cepat
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})");
Format yang Disokong
| Format | Sambungan | Baca | Tulis |
|---|---|---|---|
| Compound File Binary | .cfb | ✓ | ✓ |
| Outlook Message | .msg | ✓ | ✓ |
| MIME / EML | .eml | ✓ | ✓ |
Sumber Terbuka & Pelesenan
Aspose.Email FOSS untuk .NET dikeluarkan di bawah lesen MIT. Gunakan secara bebas dalam projek peribadi, komersial, dan sumber terbuka tanpa sekatan penggunaan. Kod sumber tersedia di github.com/aspose-email-foss/Aspose.Email-FOSS-for-.Net.