Propriedades MAPI

Propriedades MAPI

Cada arquivo MSG armazena dados como propriedades MAPI — pares chave‑valor marcados identificados por um ID de propriedade e um código de tipo. Aspose.Email FOSS for .NET fornece acesso direto a essas propriedades através de MapiMessage, MapiPropertyCollection e do enum CommonMessagePropertyId.


Lendo Propriedades

Propriedades de Conveniência

MapiMessage expõe as propriedades mais comuns como propriedades tipadas em 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?

Acesso a Propriedade Bruta

Para propriedades que não são expostas como campos de conveniência, 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 as Propriedades

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

Propriedades de Escrita

Definir Propriedades em uma Nova Mensagem

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

Acesso Direto à Coleção

MapiPropertyCollection fornece Add, Set, Get e 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);

IDs de Propriedade Comuns

O enum CommonMessagePropertyId fornece constantes nomeadas para IDs de propriedade MAPI
IDs de propriedade usados com frequência:

PropertyDescription
SubjectAssunto da mensagem
BodyCorpo em texto simples
BodyHtmlCorpo HTML
SenderNameNome de exibição do remetente
SenderEmailAddressEndereço de e‑mail do remetente
DisplayToCadeia de exibição dos destinatários “Para”
DisplayCcCadeia de exibição dos destinatários “Cc”
DisplayBccCadeia de exibição dos destinatários “Bcc”
InternetMessageIdID da mensagem RFC 5322
MessageDeliveryTimeCarimbo de data/hora da entrega
TransportMessageHeadersCabeçalhos brutos RFC 5322
AttachFilenameNome de arquivo curto do anexo
AttachLongFilenameNome de arquivo longo do anexo
AttachMimeTagTipo MIME do anexo
AttachContentIdID de conteúdo do anexo

Códigos de Tipo de Propriedade

O enum PropertyTypeCode mapeia códigos de tipo MAPI:

TipoDescrição
PtypStringstring Unicode
PtypString8string ANSI
PtypInteger32inteiro de 32 bits
PtypInteger64inteiro de 64 bits
PtypBooleanBooleano
PtypTimeDateTime (FILETIME)
PtypBinaryarray de bytes
PtypGuidGUID

Propriedades do Anexo

Cada MapiAttachment também tem sua própria coleção 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}");
}

Veja Também

 Português