Въведение

Програмиране на имейл съобщения е обща необходимост за архивиране инструменти, тръби за съответствие и миграционни инструментите. Outlook MSG файлове използват форматът на контейнер Compound File Binary (CFB) с MAPI свойства потоци, докато EML файлите следват стандарта MIME. И двата формата изискват внимателно управление на кодирането, фалшифицирани гласови панели и нежни приставки.

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 Пакетът е нужен.

Този пост преминава през възможностите за разпространение на съобщения, включени в библиотеката, от изтеглянето на файлове от диска до извличането и конвертирането на индивидуални MAPI свойства.


Какво е включено

Изтегляне на MSG файлове

и на MapiMessage клас е основната точка за влизане, за да работите с файловете на Outlook MSG. Можете да изтеглите съобщение от файл път или поток, с опционален строг валидиране знаме, което обхваща всякакви структурни проблеми, намерени в файла.

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

Връщането на MapiMessage излагат типични свойства за общи полета, включително Subject, Body, HtmlBody, SenderName, SenderEmailAddress, InternetMessageIdMessageDeliveryTime.

Изтегляне на EML съобщения

EML файловете използват формата MIME. MapiMessage.LoadFromEml Приемате файл пътят, а Stream,или А byte[] И се връща същото. MapiMessage обекта, така че да използвате един унифициран API независимо от формата на източника.

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

Парсерът обработва запечатани глави, Base64 и цитирано отпечатъчни кодове за прехвърляне и мулти-реципиентни полета To/Cc.

Работа с приемници и атрибути

След като се зарежда съобщение, получателите и прилозите са налични като силно типирани колекции. MapiRecipient носещи EmailAddress, DisplayNameRecipientType Слънчеви площи - всеки MapiAttachment осигурява Filename, Data, MimeTypeContentId.

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

Също така се поддържат вградени съобщения. когато MapiAttachment.IsEmbeddedMessage е true, на EmbeddedMessage Имотът върна настрани MapiMessage Можете да проверявате отново.

Достъп до MAPI свойства

За напреднали сценарии, всяко съобщение, получател и приложението излага Properties Събиране на типове MapiPropertyCollection.Можете да четете, добавяте и премахнете индивидуални MAPI свойства с идентификатор на собствеността им и код за тип.

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

и на CommonMessagePropertyId enum определя добре познати MAPI идентификатори за основни семантични съобщения, телесни полета, транспортни глави и метаданни на приложното.

Конвертиране между MSG и EML

Изпратено съобщение може да бъде спазено обратно във всеки формат. Save() Използва се за MSG байтове, докато SaveToEml() Продуктът MIME. Това прави конвертирането на формат просто.

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

И двата вида също така приемат Stream параметър за обработка на паметта без да се докосва файловата система.


Бързо стартиране

Инсталирайте пакета от NuGet:

dotnet add package aspose.email.foss

След това изпратете първото си послание:

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

Подкрепени формати

ФорматътРазширяванеПрочететеПисане
Изглед MSG.msgДаДа
MIME (EML).emlДаДа
Съединение на файловете бинарни.cfbДаДа

Отворени източници и лицензиране

Aspose.Email FOSS for .NET is released under the MIT license. The full source code is available on GitHub at e-mail - за да се свържете с него..Присъединения, въпроси и искания за оттегляне са добре дошли.


Започваме