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 | CC受信者の表示文字列 |
DisplayBcc | BCC受信者の表示文字列 |
InternetMessageId | RFC 5322 メッセージID |
MessageDeliveryTime | 配信タイムスタンプ |
TransportMessageHeaders | 生の RFC 5322 ヘッダー |
AttachFilename | 短い添付ファイル名 |
AttachLongFilename | 長い添付ファイル名 |
AttachMimeTag | 添付ファイル MIME タイプ |
AttachContentId | 添付ファイル Content-ID |
プロパティタイプコード
PropertyTypeCode 列挙型は MAPI タイプコードをマッピングします:
| タイプ | 説明 |
|---|---|
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 — 低レベルのバイナリコンテナへのアクセス