Propriétés MAPI

Propriétés MAPI

Chaque fichier MSG stocke les données sous forme de propriétés MAPI — paires clé‑valeur balisées identifiées par un ID de propriété et un code de type. Aspose.Email FOSS for .NET offre un accès direct à ces propriétés via MapiMessage, MapiPropertyCollection et l’CommonMessagePropertyId enum.


Lecture des propriétés

Propriétés de commodité

MapiMessage expose les propriétés les plus courantes sous forme de propriétés C# typées :

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 brut aux propriétés

Pour les propriétés qui ne sont pas exposées en tant que champs de commodité, utilisez 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}");

Itérer toutes les propriétés

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

Propriétés d’écriture

Définir les propriétés d’un nouveau message

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 direct à la collection

MapiPropertyCollection fournit Add, Set, Get et 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);

Identifiants de propriété communs

L’énumération CommonMessagePropertyId fournit des constantes nommées pour les ID de propriétés MAPI fréquemment utilisés :

PropertyDescription
SubjectSujet du message
BodyCorps en texte brut
BodyHtmlCorps HTML
SenderNameNom d’affichage de l’expéditeur
SenderEmailAddressAdresse e-mail de l’expéditeur
DisplayToChaîne d’affichage des destinataires « À »
DisplayCcChaîne d’affichage des destinataires « Cc »
DisplayBccChaîne d’affichage des destinataires « Cci »
InternetMessageIdID de message RFC 5322
MessageDeliveryTimeHorodatage de livraison
TransportMessageHeadersEn-têtes RFC 5322 bruts
AttachFilenameNom de fichier d’attachement court
AttachLongFilenameNom de fichier d’attachement long
AttachMimeTagType MIME de l’attachement
AttachContentIdID de contenu de l’attachement

Codes de type de propriété

L’énumération PropertyTypeCode mappe les codes de type MAPI :

TypeDescription
PtypStringChaîne Unicode
PtypString8Chaîne ANSI
PtypInteger32Entier 32 bits
PtypInteger64Entier 64 bits
PtypBooleanBooléen
PtypTimeDateTime (FILETIME)
PtypBinaryTableau d’octets
PtypGuidGUID

Propriétés de la pièce jointe

Chaque MapiAttachment possède également sa propre collection 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}");
}

Voir aussi

 Français