Introducción

Parking mensajes de correo electrónico programaticamente es un requisito común para las herramientas de archivo, los tubos de cumplimiento y las utilidades de migración. Los ficheros MSG de Outlook utilizan el formato de contenedor Compound File Binary (CFB) con flujos propiedad MAPI, mientras que los fichiers EML siguen la norma MIME. Ambos formatos requieren una gestión cuidadosa de codificación, headset en cuyo papel se muestran y adhesivos nestos.

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 NuGet paquete.

Este post pasa a través de las capacidades de mensaje-parsing incluidas en la biblioteca, desde cargar archivos fuera del disco hasta extraer propiedades individuales MAPI y convertir entre formatos.


Lo que está incluido

Cargar archivos MSG

El MapiMessage clase es el punto de entrada principal para trabajar con los archivos MSG de Outlook. Puede cargar un mensaje desde una ruta de archivo o un flujo, con una bandera de validación estricta opcional que superfiere cualquier problema estructural encontrado en el archivio.

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

El devuelto MapiMessage Exponen propiedades tipadas para campos comunes, incluidos Subject, Body, HtmlBody, SenderName, SenderEmailAddress, InternetMessageId,y, MessageDeliveryTime.

Descargar mensajes EML

Los archivos EML utilizan el formato MIME. MapiMessage.LoadFromEml Se acepta un archivo de ruta, a Stream,o a byte[] y devolver el mismo MapiMessage Objeto, por lo que usa una API unificada independientemente del formato de fuente.

// 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 maneja los header de papel, Base64 y codificación de transferencia impresible citada, y campos multirecipientes To/Cc.

Trabajar con receptores y accesorios

Una vez que se carga un mensaje, los receptores y anexos están disponibles como colecciones de tipo sólido. MapiRecipient Carriera EmailAddress, DisplayName,y, RecipientType Los campos. cada uno MapiAttachment proporciona Filename, Data, MimeType,y, 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);
}

También se apoyan los anexos de mensajes incorporados. cuando MapiAttachment.IsEmbeddedMessage Es el true,El , el EmbeddedMessage La propiedad devuelve a un nido MapiMessage que se puede inspeccionar de forma recurrente.

Acceso a las propiedades de MAPI

Para los escenarios avanzados, cada mensaje, reciente y apéndice exponerá un Properties Colección de tipo MapiPropertyCollection.Puedes leer, agregar y eliminar las propiedades individuales de MAPI por su ID de propiedad y código de tipo.

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 define los conocidos identificadores de propiedad MAPI para las semánticas de mensajes básicas, campos del cuerpo, heads de transporte y metadatos de adhesiones.

Conversión entre MSG y EML

Un mensaje parsed puede ser guardado de nuevo en ambos formatos. Save() Escribe los bajos de MSG, mientras que SaveToEml() producen la salida MIME. Esto hace que la conversión de formato sea sencilla.

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

Ambas medidas también aceptan una Stream Parámetros para procesamiento en memoria sin tocar el sistema de archivos.


Inicio rápido

Instale el paquete desde NuGet:

dotnet add package Aspose.Email.FOSS

Entonces, envíe tu primer mensaje:

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

Formatos apoyados

FormatoExtensionesLeerEscribe
El Outlook MSG.msg
MIME (EML).eml
Composición de archivos binarios.cfb

Open Source y Licenciación

Aspose.Email FOSS for .NET is released under the MIT license. The full source code is available on GitHub at Aspe-email-foss/Aspose.Email-FOSS-for-.Net y el servicio de correo electrónico.Las aportaciones, los temas y las solicitudes de recorrido son bienvenidos.


Empezando a

Recursos relacionados