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 :
| Property | Description |
|---|---|
Subject | Sujet du message |
Body | Corps en texte brut |
BodyHtml | Corps HTML |
SenderName | Nom d’affichage de l’expéditeur |
SenderEmailAddress | Adresse e-mail de l’expéditeur |
DisplayTo | Chaîne d’affichage des destinataires « À » |
DisplayCc | Chaîne d’affichage des destinataires « Cc » |
DisplayBcc | Chaîne d’affichage des destinataires « Cci » |
InternetMessageId | ID de message RFC 5322 |
MessageDeliveryTime | Horodatage de livraison |
TransportMessageHeaders | En-têtes RFC 5322 bruts |
AttachFilename | Nom de fichier d’attachement court |
AttachLongFilename | Nom de fichier d’attachement long |
AttachMimeTag | Type MIME de l’attachement |
AttachContentId | ID de contenu de l’attachement |
Codes de type de propriété
L’énumération PropertyTypeCode mappe les codes de type MAPI :
| Type | Description |
|---|---|
PtypString | Chaîne Unicode |
PtypString8 | Chaîne ANSI |
PtypInteger32 | Entier 32 bits |
PtypInteger64 | Entier 64 bits |
PtypBoolean | Booléen |
PtypTime | DateTime (FILETIME) |
PtypBinary | Tableau d’octets |
PtypGuid | GUID |
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
- Lecture des fichiers MSG — Charger et inspecter les fichiers MSG
- Conversion EML — Convertir entre les formats
- Conteneurs CFB — Accès aux conteneurs binaires de bas niveau