Propiedades MAPI

Propiedades MAPI

Cada archivo MSG almacena datos como propiedades MAPI — pares clave‑valor etiquetados identificados por un ID de propiedad y un código de tipo. Aspose.Email FOSS for .NET brinda acceso directo a estas propiedades a través de MapiMessage, MapiPropertyCollection y el enum CommonMessagePropertyId.


Lectura de propiedades

Propiedades de conveniencia

MapiMessage expone las propiedades más comunes como propiedades tipadas de C#:

using Aspose.Email.Foss.Msg;

using var message = MapiMessage.FromFile("sample.msg");

Console.WriteLine(message.Subject);              // string?
Console.WriteLine(message.Body);                 // string?
Console.WriteLine(message.HtmlBody);             // string?
Console.WriteLine(message.SenderName);           // string?
Console.WriteLine(message.SenderEmailAddress);   // string?
Console.WriteLine(message.InternetMessageId);    // string?
Console.WriteLine(message.MessageDeliveryTime);  // DateTime?
Console.WriteLine(message.MessageClass);         // string?

Acceso a Propiedad Cruda

Para las propiedades que no se exponen como campos de conveniencia, use GetPropertyValue:

// Read a string property by ID and type
var displayTo = message.GetPropertyValue(
    (ushort)CommonMessagePropertyId.DisplayTo,
    (ushort)PropertyTypeCode.PtypString,
    decode: true);

Console.WriteLine($"Display To: {displayTo}");

Iterar todas las propiedades

// List all property keys (ID + type pairs)
foreach (var key in message.IterPropertyKeys())
    Console.WriteLine($"Property: 0x{key:X8}");

// Iterate full property objects
foreach (var prop in message.IterProperties())
{
    Console.WriteLine($"ID=0x{prop.PropertyId:X4} " +
                      $"Type=0x{prop.PropertyType:X4} " +
                      $"Tag=0x{prop.PropertyTag:X8} " +
                      $"Value={prop.Value}");
}

Propiedades de escritura

Establecer propiedades en un nuevo mensaje

var message = MapiMessage.Create("Test", "Body");

message.SetProperty(
    (ushort)CommonMessagePropertyId.SenderName,
    (ushort)PropertyTypeCode.PtypString,
    "Alice");

message.SetProperty(
    (ushort)CommonMessagePropertyId.SenderEmailAddress,
    (ushort)PropertyTypeCode.PtypString,
    "alice@example.com");

message.SetProperty(
    (ushort)CommonMessagePropertyId.MessageDeliveryTime,
    (ushort)PropertyTypeCode.PtypTime,
    new DateTime(2026, 3, 15, 10, 30, 0, DateTimeKind.Utc));

Acceso Directo a la Colección

MapiPropertyCollection proporciona Add, Set, Get y Remove:

// Access the property collection
var props = message.Properties;

// Add a property
props.Add(
    (ushort)CommonMessagePropertyId.InternetCodepage,
    (ushort)PropertyTypeCode.PtypInteger32,
    65001,  // UTF-8
    flags: 0);

// Read it back
var codepage = props.Get(
    (ushort)CommonMessagePropertyId.InternetCodepage,
    (ushort)PropertyTypeCode.PtypInteger32);

Console.WriteLine($"Codepage: {codepage?.Value}");

// Remove a property
props.Remove(
    (ushort)CommonMessagePropertyId.InternetCodepage,
    (ushort)PropertyTypeCode.PtypInteger32);

Identificadores de Propiedad Común

El enum CommonMessagePropertyId proporciona constantes nombradas para los IDs de propiedad MAPI de uso frecuente:

PropertyDescription
SubjectAsunto del mensaje
BodyCuerpo de texto sin formato
BodyHtmlCuerpo HTML
SenderNameNombre para mostrar del remitente
SenderEmailAddressDirección de correo del remitente
DisplayToCadena de visualización de destinatarios “Para”
DisplayCcCadena de visualización de destinatarios “Cc”
DisplayBccCadena de visualización de destinatarios “Bcc”
InternetMessageIdID de mensaje RFC 5322
MessageDeliveryTimeMarca de tiempo de entrega
TransportMessageHeadersCabeceras RFC 5322 sin procesar
AttachFilenameNombre de archivo adjunto corto
AttachLongFilenameNombre de archivo adjunto largo
AttachMimeTagTipo MIME del adjunto
AttachContentIdID de contenido del adjunto

Códigos de Tipo de Propiedad

El enum PropertyTypeCode asigna códigos de tipo MAPI:

TipoDescripción
PtypStringcadena Unicode
PtypString8cadena ANSI
PtypInteger32entero de 32 bits
PtypInteger64entero de 64 bits
PtypBooleanBooleano
PtypTimeDateTime (FILETIME)
PtypBinarymatriz de bytes
PtypGuidGUID

Propiedades del adjunto

Cada MapiAttachment también tiene su propia colección Properties:

foreach (var attachment in message.Attachments)
{
    Console.WriteLine($"Attachment: {attachment.Filename}");

    foreach (var prop in attachment.Properties.IterProperties())
        Console.WriteLine($"  0x{prop.PropertyTag:X8} = {prop.Value}");
}

Ver también

 Español