Özellikler ve İşlevsellikler

Özellikler ve İşlevsellikler

Özellikler ve İşlevsellikler

Bu sayfa, Aspose.Email FOSS for .NET‘in tüm önemli özelliklerini çalışan C# örnekleriyle kapsar.


MSG Dosyalarını Okuma

Bir MSG dosyasını bir yol veya akıştan yükleyin ve tüm özelliklerine erişin:

using System.IO;
using Aspose.Email.Foss.Msg;

using var stream = File.OpenRead("message.msg");
var message = MapiMessage.FromStream(stream);

Console.WriteLine(message.Subject);
Console.WriteLine(message.Body);
Console.WriteLine(message.HtmlBody);
Console.WriteLine(message.SenderName);
Console.WriteLine(message.SenderEmailAddress);
Console.WriteLine(message.MessageDeliveryTime);
Console.WriteLine(message.InternetMessageId);

Standart dışı MSG dosyalarının gevşek ayrıştırması için strict: false kullanın:

var message = MapiMessage.FromFile("message.msg", strict: false);

ValidationIssues‘yi kontrol edin ve herhangi bir format uyarısını atma olmadan gözden geçirin:

foreach (var issue in message.ValidationIssues)
    Console.WriteLine($"Warning: {issue}");

MSG Dosyaları Oluşturma

MapiMessage.Create() ile tam bir e-posta oluşturun ve Save() ile serileştirin:

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

using var output = File.Create("hello.msg");
message.Save(output);

Save() argüman olmadan bir byte[] döndürür. Save(path) doğrudan bir dosya yoluna yazar.


Alıcılar

To, Cc ve Bcc alıcılarını AddRecipient() ile ekle:

message.AddRecipient("alice@example.com", "Alice");
message.AddRecipient("bob@example.com", "Bob", MapiMessage.RecipientTypeCc);
message.AddRecipient("carol@example.com", "Carol", MapiMessage.RecipientTypeBcc);

Yüklenmiş bir mesajdan alıcıları yineleyin:

foreach (var recipient in message.Recipients)
    Console.WriteLine($"{recipient.DisplayName} <{recipient.EmailAddress}>");

Ekler

Dosya veya akış eklerini meta verilerle ekleyin:

// From byte array
message.AddAttachment("report.pdf", pdfBytes, "application/pdf");

// From stream
using var attachStream = File.OpenRead("photo.png");
message.AddAttachment("photo.png", attachStream, "image/png");

// Inline image with Content-ID
message.AddAttachment("logo.png", logoBytes, "image/png", contentId: "logo@cid");

Yüklenmiş bir mesajdan ekleri okuyun:

foreach (var attachment in message.Attachments)
{
    Console.WriteLine($"Filename: {attachment.Filename}");
    Console.WriteLine($"MIME type: {attachment.MimeType}");
    Console.WriteLine($"Size: {attachment.Data.Length} bytes");
    File.WriteAllBytes(attachment.Filename!, attachment.Data);
}

Gömülü Mesaj Ekleri

Bir MapiMessage‘yi diğerinin içine ekleyin — yönlendirilmiş e-posta zincirlerinde yaygın.

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

Gömülü mesaj eklerini okuyun:

var loaded = MapiMessage.FromFile("outer.msg");
foreach (var attachment in loaded.Attachments)
{
    if (attachment.IsEmbeddedMessage)
    {
        Console.WriteLine($"Embedded: {attachment.EmbeddedMessage!.Subject}");
    }
}

EML ve MIME Dönüştürmesi

Outlook uyumlu depolama için bir RFC 5322 .eml dosyasını bir MapiMessage içine yükleyin:

using System.IO;
using Aspose.Email.Foss.Msg;

using var input = File.OpenRead("message.eml");
var message = MapiMessage.LoadFromEml(input);

using var msgOutput = File.Create("message.msg");
message.Save(msgOutput);

MSG dosyasından EML’ye geri dönüştür:

var message = MapiMessage.FromFile("message.msg");
using var emlOutput = File.Create("roundtrip.eml");
message.SaveToEml(emlOutput);

LoadFromEml() ayrıca bir string yolu veya byte[] kabul eder. SaveToEml() argüman olmadan bir byte[] döndürür. Konu, gövde, HTML gövdesi, gönderici, alıcılar ve tüm ekler (Content-ID ile birlikte satır içi görüntüler dahil) tam EML ↔ MSG dönüşümlerinde korunur.


MAPI Özellik Erişimi

MapiPropertyCollection, MAPI özelliklerine SetProperty() ve GetPropertyValue() aracılığıyla tiplenmiş erişim sağlar. Standart özellikler için CommonMessagePropertyId enum değerlerini kullanın:

using Aspose.Email.Foss.Msg;

var message = MapiMessage.FromFile("sample.msg");

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

CFB Kapsayıcı Erişimi

Outlook MSG dosyaları Compound File Binary (CFB) formatı üzerine inşa edilmiştir. CfbReader, inceleme ve veri çıkarımı için tam dizin ağacını ortaya çıkarır:

using System.Text;
using Aspose.Email.Foss.Cfb;

using var reader = CfbReader.FromFile("message.msg");

// Iterate all top-level children
foreach (var entry in reader.IterChildren(CfbConstants.RootStreamId))
    Console.WriteLine($"{(entry.IsStorage() ? "Storage" : "Stream")}: {entry.Name}");

// Navigate to a specific stream by path
var entry2 = reader.ResolvePath(["__substg1.0_0037001E"]);
if (entry2 is not null)
{
    var data = reader.GetStreamData(entry2.StreamId);
    Console.WriteLine(Encoding.Unicode.GetString(data));
}

CfbWriter ile sıfırdan bir CFB belgesi oluşturun ve serileştirin:

using System.Text;
using Aspose.Email.Foss.Cfb;

var document = new CfbDocument();
document.Root.AddStream(new CfbStream("Notes", 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);
File.WriteAllBytes("output.cfb", bytes);

İpuçları ve En İyi Uygulamalar

  • using veya Dispose()‘yi MapiMessage ve CfbReader üzerinde kullanarak dosya tanıtıcılarını serbest bırakın
  • Yükleme sonrasında message.ValidationIssues‘yi kontrol ederek standart dışı MSG biçimlendirmesini tespit edin
  • FromFile() / FromStream() içindeki strict parametresi hata toleransını kontrol eder — üçüncü taraf sistemlerden gelen dosyaların gevşek ayrıştırması için strict: false‘yi kullanın
  • MapiMessage.Create() varsayılan olarak Unicode dize mesajları üretir; eski ANSI uyumluluğu için unicodeStrings: false‘yi ayarlayın
  • Argümansız SaveToEml() byte[] döndürür — bellek içi iş akışları için kullanışlı

Yaygın Sorunlar

SorunNedenÇözüm
CfbException yüklenirkenGeçerli bir CFB/MSG dosyası değilDosyanın Outlook MSG olduğundan emin olun
Yüklemeden sonra boş BodyGövde yalnızca HTML olarak depolanmışBunun yerine message.HtmlBody kontrol edin
Alıcı türü sabiti bulunamadıBağımsız bir tür değilMapiMessage.RecipientTypeTo, MapiMessage.RecipientTypeCc veya MapiMessage.RecipientTypeBcc kullanın
LoadFromEml sonrası 0 ekEML dosyasında Content-Disposition: attachment parçaları yokSatır içi parçalar (yalnızca Content-ID) ayrıca Attachments içinde görünür

API Referans Özeti

SınıfAçıklama
MapiMessageYüksek seviyeli MSG mesaj temsili
MapiAttachmentMapiMessage üzerindeki ek veya gömülü mesaj
MapiRecipientMapiMessage üzerindeki alıcı
MapiPropertyTek MAPI özellik girişi
MapiPropertyCollectionTiplenmiş MAPI özellik çantası
CommonMessagePropertyIdStandart MAPI özellik tanımlayıcılarının enum’ı
MsgReaderDüşük seviyeli MSG yapı okuyucusu
MsgWriterDüşük seviyeli MSG yapı yazıcısı
CfbReaderCFB ikili konteyner okuyucusu
CfbWriterCFB ikili konteyner yazıcısı
CfbDocumentOluşturma için bellek içi CFB belgesi
CfbStorageCFB belgesindeki depolama düğümü
CfbStreamCFB belgesindeki akış düğümü
 Türkçe