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:

PropietatDescripció
SubjectAssumpte del missatge
BodyCos de text pla
BodyHtmlCos HTML
SenderNameNom per mostrar del remitent
SenderEmailAddressAdreça de correu electrònic del remitent
DisplayToCadena de visualització dels destinataris “To”
DisplayCcCadena de visualització dels destinataris “Cc”
DisplayBccCadena de visualització dels destinataris “Bcc”
InternetMessageIdMessage-ID RFC 5322
MessageDeliveryTimeMarca de temps d’entrega
TransportMessageHeadersCapçaleres RFC 5322 en brut
AttachFilenameNom de fitxer adjunt curt
AttachLongFilenameNom de fitxer adjunt llarg
AttachMimeTagTipus MIME de l’adjunt
AttachContentIdContent-ID de l’adjunt

Codis de tipus de propietat

L’enumeració PropertyTypeCode assigna codis de tipus MAPI:

TipusDescripció
PtypStringcadena Unicode
PtypString8cadena ANSI
PtypInteger32enter de 32 bits
PtypInteger64enter de 64 bits
PtypBooleanBoolean
PtypTimeDateTime (FILETIME)
PtypBinarymatriu de bytes
PtypGuidGUID

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é

 Català