MAPI 属性
MAPI 属性
每个 MSG 文件将数据存储为 MAPI 属性——通过属性 ID 和类型代码标识的标记键值对。Aspose.Email FOSS for .NET 通过 MapiMessage、MapiPropertyCollection 和 CommonMessagePropertyId 枚举直接访问这些属性。
读取属性
便利属性
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 提供 Add、Set、Get 和 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);常用属性 ID
CommonMessagePropertyId 枚举提供了用于常用 MAPI 属性 ID 的命名常量:
| Property | Description |
|---|---|
Subject | 消息主题 |
Body | 纯文本正文 |
BodyHtml | HTML 正文 |
SenderName | 发件人显示名称 |
SenderEmailAddress | 发件人电子邮件地址 |
DisplayTo | 收件人显示字符串 |
DisplayCc | 抄送收件人显示字符串 |
DisplayBcc | 密送收件人显示字符串 |
InternetMessageId | RFC 5322 消息标识 |
MessageDeliveryTime | 投递时间戳 |
TransportMessageHeaders | 原始 RFC 5322 头部 |
AttachFilename | 短附件文件名 |
AttachLongFilename | 长附件文件名 |
AttachMimeTag | 附件 MIME 类型 |
AttachContentId | 附件 Content-ID |
属性类型代码
PropertyTypeCode 枚举映射 MAPI 类型代码:
| Type | Description |
|---|---|
PtypString | Unicode 字符串 |
PtypString8 | ANSI 字符串 |
PtypInteger32 | 32 位整数 |
PtypInteger64 | 64 位整数 |
PtypBoolean | 布尔 |
PtypTime | DateTime(FILETIME) |
PtypBinary | 字节数组 |
PtypGuid | GUID |
附件属性
每个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}");
}另请参阅
- Reading MSG Files — 加载并检查 MSG 文件
- EML Conversion — 在不同格式之间转换
- CFB Containers — 低层二进制容器访问