Pengantar
Membuat analisis email secara programatis adalah persyaratan umum untuk alat arsip, pipa kepatuhan, dan utilitas migrasi. File Outlook MSG menggunakan format kontainer Compound File Binary (CFB) dengan aliran properti MAPI, sementara file EML mengikuti standar MIME. Kedua format memerlukan penanganan yang cermat dari pengkodean, header lipat, serta lampiran terlempar.
Aspose.Email FOSS for .NET is a free, MIT-licensed C# library that provides a complete read-write API for MSG and EML messages. It targets .NET 8.0+ and has no dependency on Microsoft Outlook or any native COM interop layer. The library is available as the aspose.email.foss Paket NuGet.
Posting ini berjalan melalui kemampuan analisis pesan yang termasuk dalam perpustakaan, dari memuat file off disk untuk mengekstrak properti MAPI individu dan mengkonversi antara format.
Apa yang Termasuk?
Mengunggah File MSG
Pengelolaan MapiMessage class adalah titik masuk utama untuk bekerja dengan file Outlook MSG. Anda dapat memuat pesan dari jalur file atau stream, dengan bendera validasi ketat opsional yang memunculkan masalah struktural apa pun yang ditemukan di dalam file.
// Load an MSG file from disk
var message = MapiMessage.FromFile("meeting-invite.msg");
Console.WriteLine($"Subject: {message.Subject}");
Console.WriteLine($"From: {message.SenderName} <{message.SenderEmailAddress}>");
Console.WriteLine($"Date: {message.MessageDeliveryTime}");
Console.WriteLine($"Recipients: {message.Recipients.Count}");
Console.WriteLine($"Attachments: {message.Attachments.Count}");
Yang kembali. MapiMessage menunjukkan sifat tipe untuk bidang umum termasuk: Subject, Body, HtmlBody, SenderName, SenderEmailAddress, InternetMessageId, dan MessageDeliveryTime.
Mengunggah Pesan EML
File EML menggunakan format MIME. MapiMessage.LoadFromEml menerima jalur file, a Stream, atau a byte[] dan mengembalikan yang sama. MapiMessage objek, jadi Anda menggunakan satu API yang terpadu terlepas dari format sumber.
// Load from a file path
var fromFile = MapiMessage.LoadFromEml("newsletter.eml");
// Load from a stream
using var stream = File.OpenRead("newsletter.eml");
var fromStream = MapiMessage.LoadFromEml(stream);
Console.WriteLine($"Subject: {fromStream.Subject}");
Console.WriteLine($"Body: {fromStream.Body?.Trim()}");
Parser menangani header yang dilipat, coding transfer Base64 dan kode pencetakan-dipetik, dan multi-recipient To/Cc field.
Bekerja dengan Penerima dan Lampiran
Setelah pesan dimuat, penerima dan lampiran tersedia sebagai koleksi yang diketikkan dengan kuat. MapiRecipient membawa EmailAddress, DisplayName, dan RecipientType Setiap bidang. MapiAttachment menyediakan Filename, Data, MimeType, dan ContentId.
var message = MapiMessage.FromFile("report.msg");
foreach (var recipient in message.Recipients)
{
Console.WriteLine($" {recipient.DisplayName} <{recipient.EmailAddress}> (type={recipient.RecipientType})");
}
foreach (var attachment in message.Attachments)
{
Console.WriteLine($" {attachment.Filename} ({attachment.MimeType}, {attachment.Data.Length} bytes)");
File.WriteAllBytes(attachment.Filename!, attachment.Data);
}
Lampiran pesan tertanam juga didukung. MapiAttachment.IsEmbeddedMessage adalah: true, yang EmbeddedMessage properti mengembalikan nested MapiMessage yang bisa Anda periksa secara rekursif.
Mengakses Properti MAPI
Untuk skenario lanjutan, setiap pesan, penerima dan lampiran mengekspos sebuah Properties koleksi jenis MapiPropertyCollection.Anda dapat membaca, menambahkan dan menghapus properti MAPI individu dengan ID properti mereka dan kode tipe.
var message = MapiMessage.FromFile("custom-props.msg");
// Iterate all properties on the message
foreach (var prop in message.Properties.IterProperties())
{
Console.WriteLine($"Tag: 0x{prop.PropertyTag:X8}, Value: {prop.Value}");
}
// Read a specific property
var subject = message.Properties.Get(
(ushort)CommonMessagePropertyId.Subject,
(ushort)PropertyTypeCode.PtypString);
Pengelolaan CommonMessagePropertyId enum mendefinisikan pengidentifikasi properti MAPI yang terkenal untuk semantik pesan inti, bidang tubuh, header transportasi, dan metadata lampiran.
Konversi Antara MSG dan EML
Pesan yang dianalisis dapat disimpan kembali dalam salah satu format. Save() menulis MSG byte, sementara SaveToEml() menghasilkan output MIME. Ini membuat konversi format mudah.
// Load an EML and save as MSG
var message = MapiMessage.LoadFromEml("incoming.eml");
message.Save("converted.msg");
// Load an MSG and save as EML
var msg = MapiMessage.FromFile("outgoing.msg");
msg.SaveToEml("exported.eml");
Kedua metode juga menerima a. Stream parameter untuk pengolahan dalam memori tanpa menyentuh sistem file.
Memulai dengan cepat
Instal paket dari NuGet:
dotnet add package Aspose.Email.FOSSLalu analisis pesan pertama Anda:
using Aspose.Email.Foss.Msg;
// Load an MSG file
var message = MapiMessage.FromFile("sample.msg");
Console.WriteLine($"Subject: {message.Subject}");
Console.WriteLine($"From: {message.SenderName} <{message.SenderEmailAddress}>");
Console.WriteLine($"Date: {message.MessageDeliveryTime}");
Console.WriteLine($"Body length: {message.Body?.Length ?? 0} chars");
// List attachments
foreach (var att in message.Attachments)
Console.WriteLine($" Attachment: {att.Filename} ({att.Data.Length} bytes)");
// Convert to EML
message.SaveToEml("sample.eml");
Console.WriteLine("Saved as EML.");
Format yang Didhukung
| Format (Inggris) | Perpanjangan | Bacalah. | Menulis |
|---|---|---|---|
| Perspektif MSG | .msg | Ya, aku tahu. | Ya, aku tahu. |
| MIME (EML) | .eml | Ya, aku tahu. | Ya, aku tahu. |
| Komposisi File Binary | .cfb | Ya, aku tahu. | Ya, aku tahu. |
Open Source & Lisensi
Aspose.Email FOSS for .NET is released under the MIT license. The full source code is available on GitHub at Aspose-email-foss/Aspose.Email-FOSS-for-.Net (dalam bahasa Inggris)..Kontribusi, masalah dan permintaan menarik disambut.
Memulai
- Panduan Pengembang Dokumentasi dan panduan rinci
- Basis Pengetahuan FAQ dan artikel panduan
- Referensi API referensi kelas dan metode penuh