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);Общи идентификатори на свойства
Енумът CommonMessagePropertyId предоставя именувани константи за често използвани MAPI идентификатори на свойства:
| Property | Description |
|---|---|
Subject | Тема на съобщението |
Body | Тяло в чист текст |
BodyHtml | HTML тяло |
SenderName | Име за показване на подателя |
SenderEmailAddress | Имейл адрес на подателя |
DisplayTo | Низ за показване на получателите (To) |
DisplayCc | Низ за показване на получателите (Cc) |
DisplayBcc | Низ за показване на получателите (Bcc) |
InternetMessageId | Message-ID по RFC 5322 |
MessageDeliveryTime | Времеви печат на доставката |
TransportMessageHeaders | Необработени заглавки по RFC 5322 |
AttachFilename | Кратко име на прикачения файл |
AttachLongFilename | Дълго име на прикачения файл |
AttachMimeTag | MIME тип на прикачения файл |
AttachContentId | Content-ID на прикачения файл |
Кодове за тип имот
Енумът PropertyTypeCode съпоставя MAPI типове кодове:
| Тип | Описание |
|---|---|
PtypString | Unicode string |
PtypString8 | ANSI string |
PtypInteger32 | 32-bit integer |
PtypInteger64 | 64-bit integer |
PtypBoolean | Boolean |
PtypTime | DateTime (FILETIME) |
PtypBinary | Byte array |
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}");
}Вижте също
- Четене на MSG файлове — Зареждане и преглед на MSG файлове
- Конвертиране на EML — Конвертиране между формати
- CFB контейнери — Достъп до ниско ниво на бинарни контейнери