大容量 PST ファイルの操作
Contents
[
Hide
]
大容量 PST ファイルを処理するとパフォーマンスが低下する可能性があります。以下のソリューションは、大容量ストレージファイルを処理する際のアプリのパフォーマンス向上に役立ちます。
戻り値を返すメソッドを検討してください
IEnumerable pst のフォルダーやメッセージを走査する際に
using var pst = PersonalStorage.FromFile(@"storage.pst");
foreach (var folder in pst.RootFolder.EnumerateFolders())
foreach (var messageInfo in folder.EnumerateMessages())
{
// Do something with message
}
優先使用 MessageInfo 基本的なメッセージ プロパティにアクセスするために
foreach (var messageInfo in folder.EnumerateMessages())
{
Console.WriteLine($"Subject: {messageInfo.Subject}");
Console.WriteLine($"To: {messageInfo.DisplayTo}");
Console.WriteLine($"Importance: {messageInfo.Importance}");
Console.WriteLine($"Message Class: {messageInfo.MessageClass}");
}
以下の使用は避けてください ExtractMessage または EnumerateMapiMessages すべてのメッセージに対してメソッドを使用してください(すべてのプロパティにアクセスする必要がある場合を除く)。
使用を検討してください EnumerateMessagesEntryId フォルダーに含まれるすべてのメッセージ ID を簡単に取得するために
foreach (var id in folder.EnumerateMessagesEntryId())
{
// Use id to retrieve a property (ExtractProperty),
// extract a MapiMessage (ExtractMessage),
// extarct message attachments (ExtractAttachments),
// save msg to a stream(SaveMessageToStream).
}
使用を検討してください ExtractProperty MessageInfo に欠落している単一プロパティを読み取るために
foreach (var msgId in folder.EnumerateMessagesEntryId())
{
var transportMessageHeaders =
pst.ExtractProperty(Convert.FromBase64String(msgId), KnownPropertyList.TransportMessageHeaders.Tag)
.GetString();
}
使用を検討してください ExtractAttachments 添付ファイルのみが必要な場合は
foreach (var msgId in folder.EnumerateMessagesEntryId())
{
var attachments = pst.ExtractAttachments(msgId);
}
使用する 条件で検索ベースのフィルタリングで必要なメッセージを取得します。
using var pst = PersonalStorage.FromFile(@"storage.pst");
var builder = new PersonalStorageQueryBuilder();
// Unread messages
builder.HasNoFlags(MapiMessageFlags.MSGFLAG_READ);
foreach (var folder in pst.RootFolder.EnumerateFolders())
{
var unread = folder.GetContents(builder.GetQuery());
}
使用を検討してください SaveMessageToStream pst からメッセージを保存する必要がある場合は
以下の代わりに使用してください:
foreach (var id in folder.EnumerateMessagesEntryId())
{
var msg = pst.ExtractMessage(id);
msg.Save(@"message.msg");
}
使用例:
foreach (var id in folder.EnumerateMessagesEntryId())
{
pst.SaveMessageToStream(id, File.OpenWrite(@"message.msg"));
}