Introduction

E-posta mesajları programlı olarak arşivleme araçları, uyumluluk borular ve göç araçlar için yaygın bir gerekliliktir. Outlook MSG dosyaları MAPI özellik akışları ile kombine Dosya Binary (CFB) konteyner biçimini kullanırken EML dosyalar MIME standartlarına uymaktadır. Her iki format da kodlama, çubuklu başlıklar ve kaydırılmış eklentiler dikkatli bir şekilde işlenmesi gerektirir.

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 Paketi için tıklayınız.

Bu yazı, kütüphanede yer alan mesaj-parsing özelliklerini, dosyaları diskten çıkarmaktan bireysel MAPI özelliklerinin çıkarılmasına ve formatlar arasında dönüştürülmesine kadar yürür.


Ne içeriyor

MSG Dosyaları Yükleme

O zamanlar MapiMessage Sınıf, Outlook MSG dosyaları ile çalışmak için ana giriş noktasıdır. bir dosya yolu veya akışından bir mesaj yüklemek mümkün, seçmeli sıkı doğrulama bayrağı ile dosyada bulunan herhangi bir yapısal sorun yüzeyi.

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

Geri döndüğü MapiMessage Toplam alanlar için tipik özellikleri ortaya çıkarır, dahil olmak üzere Subject, Body, HtmlBody, SenderName, SenderEmailAddress, InternetMessageId,ve MessageDeliveryTime.

EML Mesajları

EML dosyaları MIME biçimini kullanır. MapiMessage.LoadFromEml bir dosya yolu kabul eder, a Stream,ya da a byte[] Aynı şekilde geri dönüyor. MapiMessage nesne, böylece kaynak biçimi ne olursa olsun birleşik API kullanırsınız.

// 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, doldurulmuş başlıkları, Base64 ve basılı transfer kodlarını ve çoklu alıcı To/Cc alanlarını işler.

Alıcılar ve Aracı ile Çalışma

Bir mesaj yüklendiğinde, alıcılar ve eklentiler güçlü bir şekilde tip edilmiş koleksiyonlar olarak mevcuttur. MapiRecipient Taşıma EmailAddress, DisplayName,ve RecipientType Çeşitleri - Her MapiAttachment sağlar Filename, Data, MimeType,ve 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);
}

Bu mesajın içine giren eklentiler de desteklenir. MapiAttachment.IsEmbeddedMessage Onu true, The EmbeddedMessage Mülkiyet bir yıkımdan geri dönüyor MapiMessage tekrar tekrar kontrol edebilirsiniz.

MAPI Özellikleri

Gelişmiş senaryolar için, her mesaj, alıcı ve eklenti bir Properties Tip Koleksiyonu MapiPropertyCollection. bireysel MAPI özelliklerini kendi mülkiyet kimliği ve tip kodu ile okuyabilir, ekleyebilir ve çıkarabilirsiniz.

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

O zamanlar CommonMessagePropertyId enum, temel mesaj semantikleri, vücut alanları, taşıma başlıkları ve yapıştırıcı metadata için tanınmış MAPI özellik tanımlayıcılarını tanımlar.

MSG ve EML arasındaki dönüşüm

Bir parsed mesaj her biçimde kaydedilebilir. Save() MSG bytes yazıyor, ancak SaveToEml() MIME çıkışını üretir. bu, format dönüşümünü kolaylaştırır.

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

Her iki yöntem de bir Stream Dosya sistemine dokunmadan in-memory işleme parametresi.


Hızlı Başlangıç

NuGet’ten paketi yükleyin:

dotnet add package Aspose.Email.FOSS

İlk mesajınızı gönderin:

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

Desteklenen Formatlar

FormatExtensionReadWrite
Outlook MSG İndirme.msgEvetEvet
MIME (EML).emlEvetEvet
Binary Dosya Yapılandırma.cfbEvetEvet

Açık Kaynak & Lisans

Aspose.Email FOSS for .NET is released under the MIT license. The full source code is available on GitHub at e-posta adresi - e/postal adresin adresini - web sitesi.Katkıları, soruları ve çekme talepleri hoşgeldiniz.


Başlamaya başlar

İlgili Kaynaklar