Introducció
L’anàlisi de missatges d’e-mail programàticament és un requisit comú per a eines d ‘arxiu, pipelines de compliment i utilitats de migració. Els arxius MSG d “Outlook fan servir el format de contenidor Compound File Binary (CFB) amb fluxos de propietats MAPI, mentre que els arxivs EML segueixen l’estàndard MIME. Ambdós formats requieren una manipulació cuidadosa de codificacions, encaixons plegats i adjunts anidats.
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 El paquet NuGet.
Aquesta publicació fa un recorregut per les capacitats d’anàlisi de missatges incloses en la biblioteca, des del carregament de fitxers fora del disc fins a l’extracció de propietats MAPI individuals i convertint entre formats.
Què inclou?
Carrega arxius MSG
El MapiMessage class és el punt d’entrada principal per treballar amb arxius Outlook MSG. Pots carregar un missatge des duna ruta de fitxer o una corrent, amb una bandera opcional de validació estricta que fa ressò de qualsevol problema estructural trobat al fitxatge.
// 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}");
Els que han tornat. MapiMessage exposa propietats tipades per camps comuns, inclosos: Subject, Body, HtmlBody, SenderName, SenderEmailAddress, InternetMessageId, i MessageDeliveryTime.
Carregament de missatges EML
Els arxius EML utilitzen el format MIME. MapiMessage.LoadFromEml accepta una ruta de fitxer, un Stream, o un byte[] i torna el mateix MapiMessage object, així que utilitzeu una API unificada independentment del format de la font.
// 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()}");
El parser tracta encabezats plegats, codificacions de transferència Base64 i impresibles amb citatges, i camps To/Cc multireceptors.
Treballar amb els destinataris i els apendicis
Un cop es carrega un missatge, els destinataris i les anexos estan disponibles com a col·leccions de tipus fort. MapiRecipient porta EmailAddress, DisplayName, i RecipientType Cada camp. MapiAttachment proporciona: Filename, Data, MimeType, i 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);
}
També es suporten els apanyaments de missatges incrustats. MapiAttachment.IsEmbeddedMessage és true, el EmbeddedMessage la propietat retorna un anidada MapiMessage que es pot inspeccionar recursivament.
Accedir a les propietats MAPI
Per a escenaris avançats, cada missatge, destinatari i adjunt exposa un Properties Col·lecció de tipus MapiPropertyCollection.Podeu llegir, afegir i eliminar propietats MAPI individuals per la seva ID de propietat i codi de tipus.
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);
El CommonMessagePropertyId enum defineix identificadors de propietats MAPI ben coneguts per a la semàntica del missatge central, camps corporals, encabezaments de transport i metadades d’apadhament.
Conversió entre MSG i EML
Un missatge analitzat pot ser guardat en qualsevol format. Save() escriu bytes MSG, mentre que SaveToEml() Això fa que la conversió de format sigui senzilla.
// 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");
Ambdós mètodes també accepten un Stream paràmetre per al processament en memòria sense tocar el sistema de fitxers.
Inici ràpid
Instal·lar el paquet des de NuGet:
dotnet add package aspose.email.foss
Llavors analisa el teu primer missatge:
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.");
Formats suportats
| Format de la pàgina | Extensió | Llegeix. | Escriure |
|---|---|---|---|
| Perspectiva MSG | .msg | Sí, sí. | Sí, sí. |
| MIME (EML) | .eml | Sí, sí. | Sí, sí. |
| Arxiu binari compost | .cfb | Sí, sí. | Sí, sí. |
Fonte oberta i llicències
Aspose.Email FOSS for .NET is released under the MIT license. The full source code is available on GitHub at aspose-email-foss/Aspose.Email-FOSS-per-.Net.Les contribucions, les peticions i els tractaments són benvinguts.
Com començar a treballar
- Guia de desenvolupadors documentació detallada i guies d’actuacions
- Base de coneixement FAQ i articles d’instruccions
- Referència a l’API Referència completa de classe i mètode