MAPI プロパティ

MAPI プロパティ

すべての MSG ファイルは、MAPI プロパティとしてデータを格納します — プロパティ ID とタイプコードで識別されるタグ付きキー‑バリュー ペアです。Aspose.Email FOSS for .NET は、MapiMessageMapiPropertyCollection、および 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));

直接コレクションアクセス

MapiPropertyCollectionAddSetGet、および 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 の名前付き定数を提供します:

PropertyDescription
Subjectメッセージの件名
Bodyプレーンテキスト本文
BodyHtmlHTML本文
SenderName送信者の表示名
SenderEmailAddress送信者のメールアドレス
DisplayTo宛先受信者の表示文字列
DisplayCcCC受信者の表示文字列
DisplayBccBCC受信者の表示文字列
InternetMessageIdRFC 5322 メッセージID
MessageDeliveryTime配信タイムスタンプ
TransportMessageHeaders生の RFC 5322 ヘッダー
AttachFilename短い添付ファイル名
AttachLongFilename長い添付ファイル名
AttachMimeTag添付ファイル MIME タイプ
AttachContentId添付ファイル Content-ID

プロパティタイプコード

PropertyTypeCode 列挙型は MAPI タイプコードをマッピングします:

タイプ説明
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}");
}

参照

 日本語