Propietats MAPI
Propietats MAPI
Cada fitxer MSG emmagatzema dades com a propietats MAPI — parelles clau‑valor etiquetades identificades per un ID de propietat i un codi de tipus. Aspose.Email FOSS for .NET ofereix accés directe a aquestes propietats a través de MapiMessage, MapiPropertyCollection i l’enumeració CommonMessagePropertyId.
Lectura de propietats
Propietats de conveniència
MapiMessage exposa les propietats més comunes com a propietats tipades 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?Accés a propietat en brut
Per a les propietats que no es mostren com a camps de conveniència, utilitzeu 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}");Itera totes les propietats
// 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}");
}Propietats d’escriptura
Establir propietats en un missatge nou
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));Accés directe a la col·lecció
MapiPropertyCollection proporciona Add, Set, Get i 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);Identificadors de propietat comuns
L’enumeració CommonMessagePropertyId proporciona constants amb nom per a IDs de propietats MAPI utilitzats freqüentment:
| Propietat | Descripció |
|---|---|
Subject | Assumpte del missatge |
Body | Cos de text pla |
BodyHtml | Cos HTML |
SenderName | Nom per mostrar del remitent |
SenderEmailAddress | Adreça de correu electrònic del remitent |
DisplayTo | Cadena de visualització dels destinataris “To” |
DisplayCc | Cadena de visualització dels destinataris “Cc” |
DisplayBcc | Cadena de visualització dels destinataris “Bcc” |
InternetMessageId | Message-ID RFC 5322 |
MessageDeliveryTime | Marca de temps d’entrega |
TransportMessageHeaders | Capçaleres RFC 5322 en brut |
AttachFilename | Nom de fitxer adjunt curt |
AttachLongFilename | Nom de fitxer adjunt llarg |
AttachMimeTag | Tipus MIME de l’adjunt |
AttachContentId | Content-ID de l’adjunt |
Codis de tipus de propietat
L’enumeració PropertyTypeCode assigna codis de tipus MAPI:
| Tipus | Descripció |
|---|---|
PtypString | cadena Unicode |
PtypString8 | cadena ANSI |
PtypInteger32 | enter de 32 bits |
PtypInteger64 | enter de 64 bits |
PtypBoolean | Boolean |
PtypTime | DateTime (FILETIME) |
PtypBinary | matriu de bytes |
PtypGuid | GUID |
Propietats de l’adjunt
Cada MapiAttachment també té la seva pròpia col·lecció 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}");
}Vegeu també
- Reading MSG Files — Carrega i inspecciona fitxers MSG
- EML Conversion — Converteix entre formats
- CFB Containers — Accés a contenidors binaris de baix nivell