MAPI 属性

MAPI 属性

每个 MSG 文件将数据存储为 MAPI 属性——通过属性 ID 和类型代码标识的标记键值对。Aspose.Email FOSS for .NET 通过 MapiMessageMapiPropertyCollectionCommonMessagePropertyId 枚举直接访问这些属性。


读取属性

便利属性

MapiMessage 将最常用的属性公开为已键入的 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?

原始属性访问

对于未作为便利字段公开的属性,请使用 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}");

遍历所有属性

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

写入属性

在新消息上设置属性

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));

直接集合访问

MapiPropertyCollection 提供 AddSetGetRemove

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

常用属性 ID

CommonMessagePropertyId 枚举提供了用于常用 MAPI 属性 ID 的命名常量:

PropertyDescription
Subject消息主题
Body纯文本正文
BodyHtmlHTML 正文
SenderName发件人显示名称
SenderEmailAddress发件人电子邮件地址
DisplayTo收件人显示字符串
DisplayCc抄送收件人显示字符串
DisplayBcc密送收件人显示字符串
InternetMessageIdRFC 5322 消息标识
MessageDeliveryTime投递时间戳
TransportMessageHeaders原始 RFC 5322 头部
AttachFilename短附件文件名
AttachLongFilename长附件文件名
AttachMimeTag附件 MIME 类型
AttachContentId附件 Content-ID

属性类型代码

PropertyTypeCode 枚举映射 MAPI 类型代码:

TypeDescription
PtypStringUnicode 字符串
PtypString8ANSI 字符串
PtypInteger3232 位整数
PtypInteger6464 位整数
PtypBoolean布尔
PtypTimeDateTime(FILETIME)
PtypBinary字节数组
PtypGuidGUID

附件属性

每个MapiAttachment也都有其自己的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}");
}

另请参阅

 中文