Pendahuluan
Aspose.Email FOSS for .NET adalah perpustakaan C# berlisensi MIT, bebas ketergantungan, untuk bekerja dengan
file Outlook MSG, kontainer Compound File Binary (CFB), dan pesan EML. Posting ini menjelajahi
setiap area fitur utama dengan contoh kode yang berfungsi yang diambil langsung dari perpustakaan
suite pengujian — setiap nama kelas dan tanda tangan metode yang ditampilkan di sini diverifikasi terhadap
source repository.
Instal dengan satu perintah — tidak ada Microsoft Outlook, tidak ada interop COM, tidak ada pustaka native:
dotnet add package Aspose.Email.Foss
Fitur Utama
Baca dan Periksa File MSG
MapiMessage.FromStream() dan MapiMessage.FromFile() membuka file Outlook .msg apa pun dan
menampilkan seluruh isinya: subjek, isi teks polos, isi HTML, nama pengirim, alamat email
pengirim, waktu pengiriman, ID pesan internet, penerima, dan lampiran. Tidak diperlukan instalasi Outlook
— seluruh lapisan MSG dan CFB diimplementasikan dalam C# yang dikelola.
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})");
Buat File MSG dari Awal
MapiMessage.Create() membangun email lengkap di memori. Setel SenderName,
SenderEmailAddress, HtmlBody, InternetMessageId, dan MessageDeliveryTime sebagai
properti setelah pembuatan, kemudian tambahkan penerima dengan AddRecipient() dan lampiran file atau stream dengan AddAttachment(). Serialisasi dengan message.Save() — mengembalikan sebuah byte[]
atau menulis langsung ke jalur 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);
Mengonversi EML ke MSG (dan Kembali)
MapiMessage.LoadFromEml() menerima jalur file, sebuah Stream, atau sebuah byte[] yang berisi
pesan standar RFC 5322 / MIME. Parser MIME bawaan mempertahankan subjek, isi teks biasa,
isi HTML, pengirim, penerima, dan semua lampiran — termasuk gambar inline dengan
header Content-ID. SaveToEml() menyerialkan kembali ke MIME untuk perjalanan penuh EML ↔ MSG
tanpa pustaka MIME eksternal.
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 Pesan Tertanam
File MSG dapat berisi file MSG lain sebagai lampiran — pola umum dalam rantai email yang diteruskan. AddEmbeddedMessageAttachment() melampirkan objek MapiMessage sebagai lampiran .msg bersarang. Saat membaca, MapiAttachment.IsEmbeddedMessage memberi sinyal tipe yang disematkan dan EmbeddedMessage mengekspos 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}");
Membaca dan Menulis Kontainer CFB
File MSG Outlook dibangun di atas format Compound File Binary (CFB) — sebuah kontainer biner hierarkis yang mirip dengan sistem berkas FAT. CfbReader menampilkan seluruh pohon direktori: iterasi storage dan stream dengan IterChildren(), menavigasi ke entri tertentu dengan rantai path menggunakan ResolvePath(), dan membaca byte stream mentah dengan GetStreamData(). CfbWriter.ToBytes() menyerialisasi sebuah CfbDocument menjadi byte — berguna untuk membangun dokumen CFB khusus atau memverifikasi perjalanan bolak‑balik 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 Properti MAPI Bertipe
MapiPropertyCollection menyediakan akses properti MAPI yang bertipe untuk objek MSG atau penyimpanan apa pun.
The CommonMessagePropertyId enum mencakup semua pengidentifikasi properti MAPI standar — Subject,Body, BodyHtml, SenderName, SenderEmailAddress, MessageDeliveryTime,InternetMessageId, dan properti lampiran termasuk AttachFilename, AttachMimeTag,
dan AttachContentId. Gunakan SetProperty() dan GetPropertyValue() untuk membaca dan menulis
properti arbitrer di luar bidang kenyamanan yang dinamai 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}");
Panduan 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 Didukung
| Format | Ekstensi | Baca | Tulis |
|---|---|---|---|
| Compound File Binary | .cfb | ✓ | ✓ |
| Outlook Message | .msg | ✓ | ✓ |
| MIME / EML | .eml | ✓ | ✓ |
Sumber Terbuka & Lisensi
Aspose.Email FOSS untuk .NET dirilis di bawah lisensi MIT. Gunakan secara bebas dalam proyek pribadi, komersial, dan sumber terbuka tanpa batasan penggunaan. Kode sumber tersedia di github.com/aspose-email-foss/Aspose.Email-FOSS-for-.Net.