Въведение
Програмиране на имейл съобщения е обща необходимост за архивиране инструменти, тръби за съответствие и миграционни инструментите. 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, InternetMessageId,и MessageDeliveryTime.
Изтегляне на 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, DisplayName,и RecipientType Слънчеви площи - всеки MapiAttachment осигурява Filename, Data, MimeType,и 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);
}
Също така се поддържат вградени съобщения. когато 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 - за да се свържете с него..Присъединения, въпроси и искания за оттегляне са добре дошли.
Започваме
- Разработчик ръководство - подробна документация и ход на разходка
- Знание база FAQ и как да се чете статии
- Огнено референтно - пълна класа и метод на референтност