Giriş

Aspose.Email FOSS for .NET, MIT lisanslı, bağımlılıksız bir C# kütüphanesidir ve
Outlook MSG dosyaları, Compound File Binary (CFB) kapsayıcıları ve EML mesajlarıyla çalışmak için.
Bu gönderi,
kütüphanenin test paketinden doğrudan alınan çalışan kod örnekleriyle her ana özellik alanını
adım adım inceliyor — burada gösterilen her sınıf adı ve yöntem imzası
source repository ile doğrulanmıştır.

Tek bir komutla kurun — Microsoft Outlook yok, COM interop yok, yerel kütüphaneler yok:

dotnet add package Aspose.Email.Foss

Temel Özellikler

MSG Dosyalarını Oku ve İncele

MapiMessage.FromStream() ve MapiMessage.FromFile() herhangi bir Outlook .msg dosyasını açar ve tam içeriğini ortaya çıkarır: konu, düz metin gövdesi, HTML gövdesi, gönderici adı, gönderici e-posta adresi, teslim zamanı, internet mesaj kimliği, alıcılar ve ekler. Outlook kurulumu gerekmez — tüm MSG ve CFB katmanı yönetilen C# ile uygulanmıştır.

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})");

Sıfırdan MSG Dosyaları Oluşturun

MapiMessage.Create() bellekte tam bir e‑posta oluşturur. Oluşturulduktan sonra SenderName, SenderEmailAddress, HtmlBody, InternetMessageId ve MessageDeliveryTime öğelerini özellik olarak ayarlayın, ardından alıcıları AddRecipient() ile ekleyin ve dosya ya da akış eklerini AddAttachment() ile ekleyin. message.Save() ile serileştirin — bir byte[] döndürür veya doğrudan bir yola ya da Stream yazar.

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’yi MSG’ye Dönüştür (ve Geri)

MapiMessage.LoadFromEml() bir dosya yolu, bir Stream veya bir byte[] kabul eder ve içinde bir
standart RFC 5322 / MIME mesajı. Yerleşik MIME ayrıştırıcısı konu, düz metin
gövde, HTML gövde, gönderen, alıcılar ve tüm ekleri — satır içi görüntülerle birlikte
Content-ID başlıkları. SaveToEml() tam EML ↔ MSG dönüşleri için MIME’ye geri serileştirir
herhangi bir dış MIME kütüphanesi olmadan.

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);

Gömülü Mesaj Ekleri

Bir MSG dosyası, başka bir MSG dosyasını ek olarak içerebilir — yönlendirilmiş e-posta zincirlerinde yaygın bir desen. AddEmbeddedMessageAttachment(), bir MapiMessage nesnesini iç içe bir .msg ek olarak ekler. Okurken, MapiAttachment.IsEmbeddedMessage gömülü türü işaret eder ve EmbeddedMessage iç içe MapiMessage‘yi doğrudan ortaya çıkarır.

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 Kapsayıcı Okuma ve Yazma

Outlook MSG dosyaları, Compound File Binary (CFB) formatı üzerine inşa edilmiştir — hiyerarşik bir ikili kapsayıcı, FAT dosya sistemine benzer. CfbReader tam dizin ağacını ortaya çıkarır: depolamaları ve akışları IterChildren() ile yineleyin, belirli girişlere yol zinciriyle ResolvePath() ile gidin ve ham akış baytlarını GetStreamData() ile okuyun. CfbWriter.ToBytes() bir CfbDocument‘yi baytlara serileştirir — özel CFB belgeleri oluşturmak veya kayıpsız dönüşleri doğrulamak için kullanışlıdır.

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"
}

Tiplenmiş MAPI Özellik Erişimi

MapiPropertyCollection, herhangi bir MSG veya depolama nesnesi için tiplenmiş MAPI özelliği erişimi sağlar.
The CommonMessagePropertyId enum covers all standard MAPI property identifiers — Subject,
Body, BodyHtml, SenderName, SenderEmailAddress, MessageDeliveryTime,
InternetMessageId, ve ek özellikleri, AttachFilename, AttachMimeTag ve AttachContentId dahil.
SetProperty() ve GetPropertyValue()‘i, MapiMessage üzerindeki adlandırılmış kolaylık alanlarının ötesindeki
keyfi özellikleri okumak ve yazmak için kullanın.

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}");

Hızlı Başlangıç

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})");

Desteklenen Formatlar

BiçimUzantıOkumaYazma
Compound File Binary.cfb
Outlook Message.msg
MIME / EML.eml

Açık Kaynak ve Lisanslama

Aspose.Email FOSS for .NET MIT lisansı altında yayınlanmıştır. Kişisel, ticari ve açık kaynak projelerinde kullanım kısıtlaması olmadan özgürce kullanabilirsiniz. Kaynak kodu şu adreste mevcuttur github.com/aspose-email-foss/Aspose.Email-FOSS-for-.Net.


Başlarken