Propriedades MAPI
Propriedades MAPI
Este guia mostra como ler, iterar e escrever propriedades MAPI em arquivos Outlook MSG usando Aspose.Email FOSS para .NET. Cada arquivo MS G armazena dados como pares de valores-chave marcados; acesse-os através do MapiMessage, MapiPropertyCollection, e o CommonMessagePropertyId - Não.
Propriedades de leitura
Propriedades de conveniência
MapiMessage expõe as propriedades mais comuns como proprietas tipizadas 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 à propriedade bruta
Para propriedades não expostas como campos de conveniência digitados, chamar a: GetPropertyValue() com o ID da propriedade, código do tipo e um decode Indicador para obter o valor bruto:
// 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
Chama-me . IterPropertyKeys() Enumerar todos os pares (ID de propriedade, tipo) ou utilizar: IterProperties() para obter os objetos de propriedade completos, incluindo etiqueta e valor decodificado:
// List all property keys (ID + type pairs)
foreach (var (propId, propType) in message.IterPropertyKeys())
Console.WriteLine($"Property: 0x{propId:X4} (type: 0x{propType:X4})");
// 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
Configurar propriedades em uma nova mensagem
Criar um MapiMessage com: MapiMessage.Create(),Então , liga-me . SetProperty() com um CommonMessagePropertyId constante, a PropertyTypeCode, e o valor a definir:
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 directo à recolha de dados
MapiPropertyCollection exposições Add, Set, Get, e Remove métodos para o controlo pormenorizado das propriedades individuais do MAPI sem passar pela API de conveniência tipada:
// 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 propriedade comum
A Comissão CommonMessagePropertyId enum lista IDs de propriedade. Passe estas constantes para GetPropertyValue e a) SetProperty em vez de literais numéricos:
| Propriedade | Descrição: |
|---|---|
Subject | Objeto da mensagem: |
Body | Corpo de texto simples |
BodyHtml | Corpo HTML |
SenderName | Nome de exibição do remetente |
SenderEmailAddress | Endereço de e-mail do remetente |
DisplayTo | Para os destinatários exibir cadeia de caracteres |
DisplayCc | Cc destinatários display string |
DisplayBcc | Bcc destinatários exibir cadeia de caracteres |
InternetMessageId | RFC 5322 Identificação de mensagem |
MessageDeliveryTime | Marca de entrega |
TransportMessageHeaders | Cabeçalhos de RFC 5322 em bruto |
AttachFilename | Nome de arquivo do anexo curto |
AttachLongFilename | Nome de arquivo longo do anexo |
AttachMimeTag | Tipo MIME de anexo |
AttachContentId | Identificador de conteúdo do anexo |
Códigos do tipo de propriedade
A Comissão PropertyTypeCode enum maps Códigos de tipo MAPI:
| Tipo de veículo: | Descrição: |
|---|---|
PtypString | Criação de Unicode |
PtypString8 | Cadeia ANSI |
PtypInteger32 | 32-bit integer |
PtypInteger64 | 64-bit integer |
PtypBoolean | Booleano |
PtypTime | Data e hora (FILETIME) |
PtypBinary | Array de bytes |
PtypGuid | GUID |
Propriedades de fixação
Cada um. MapiAttachment também tem a sua própria Properties Coleção Iterada attachment.Properties.IterProperties() Enumerar todas as entradas de propriedade MAPI para esse anexo:
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 também:
- Leitura de ficheiros MSG Carregar e inspecionar arquivos MSG
- Conversão EML Converter entre formatos
- Containers CFB Acesso a um recipiente binário de baixo nível