Properti MAPI

Properti MAPI

Setiap file MSG menyimpan data sebagai properti MAPI — pasangan kunci‑nilai yang ditandai yang diidentifikasi oleh ID properti dan kode tipe. Aspose.Email FOSS for .NET memberikan akses langsung ke properti ini melalui MapiMessage, MapiPropertyCollection, dan enum CommonMessagePropertyId.


Membaca Properti

Properti Kemudahan

MapiMessage menampilkan properti paling umum sebagai properti C# yang bertipe:

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?

Akses Properti Mentah

Untuk properti yang tidak diekspos sebagai field kemudahan, gunakan 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}");

Iterasi Semua Properti

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

Menulis Properti

Atur Properti pada Pesan Baru

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

Akses Koleksi Langsung

MapiPropertyCollection menyediakan Add, Set, Get, dan 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 Properti Umum

Enum CommonMessagePropertyId menyediakan konstanta bernama untuk ID properti MAPI yang sering digunakan:

PropertiDeskripsi
SubjectSubjek pesan
BodyIsi teks biasa
BodyHtmlIsi HTML
SenderNameNama tampilan pengirim
SenderEmailAddressAlamat email pengirim
DisplayToString tampilan penerima To
DisplayCcString tampilan penerima Cc
DisplayBccString tampilan penerima Bcc
InternetMessageIdRFC 5322 Message-ID
MessageDeliveryTimeStempel waktu pengiriman
TransportMessageHeadersHeader RFC 5322 mentah
AttachFilenameNama file lampiran pendek
AttachLongFilenameNama file lampiran panjang
AttachMimeTagTipe MIME lampiran
AttachContentIdContent-ID lampiran

Kode Tipe Properti

Enum PropertyTypeCode memetakan kode tipe MAPI:

TipeDeskripsi
PtypStringUnicode string
PtypString8ANSI string
PtypInteger3232-bit integer
PtypInteger6464-bit integer
PtypBooleanBoolean
PtypTimeDateTime (FILETIME)
PtypBinaryByte array
PtypGuidGUID

Properti Lampiran

Setiap MapiAttachment juga memiliki koleksi Properties miliknya sendiri:

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

Lihat Juga

 Bahasa Indonesia