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 идентификатори на свойства:

PropertyDescription
SubjectТема на съобщението
BodyТяло в чист текст
BodyHtmlHTML тяло
SenderNameИме за показване на подателя
SenderEmailAddressИмейл адрес на подателя
DisplayToНиз за показване на получателите (To)
DisplayCcНиз за показване на получателите (Cc)
DisplayBccНиз за показване на получателите (Bcc)
InternetMessageIdMessage-ID по RFC 5322
MessageDeliveryTimeВремеви печат на доставката
TransportMessageHeadersНеобработени заглавки по RFC 5322
AttachFilenameКратко име на прикачения файл
AttachLongFilenameДълго име на прикачения файл
AttachMimeTagMIME тип на прикачения файл
AttachContentIdContent-ID на прикачения файл

Кодове за тип имот

Енумът PropertyTypeCode съпоставя MAPI типове кодове:

ТипОписание
PtypStringUnicode string
PtypString8ANSI string
PtypInteger3232-bit integer
PtypInteger6464-bit integer
PtypBooleanBoolean
PtypTimeDateTime (FILETIME)
PtypBinaryByte array
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}");
}

Вижте също

 Български