Работа с большими PST файлами

Contents
[ ]

Производительность может ухудшаться при обработке больших PST файлов. Следующие рекомендации помогут вам улучшить производительность вашего приложения при обработке больших файлов.

using var pst = PersonalStorage.FromFile(@"storage.pst");

foreach (var folder in pst.RootFolder.EnumerateFolders())
foreach (var messageInfo in folder.EnumerateMessages())
{
    // Выполните какое-либо действие с сообщением
}
foreach (var messageInfo in folder.EnumerateMessages())
{
    Console.WriteLine($"Тема: {messageInfo.Subject}");
    Console.WriteLine($"Кому: {messageInfo.DisplayTo}");
    Console.WriteLine($"Важность: {messageInfo.Importance}");
    Console.WriteLine($"Класс сообщения: {messageInfo.MessageClass}");
}
foreach (var id in folder.EnumerateMessagesEntryId())
{
   // Используйте id, чтобы получить свойство (ExtractProperty),
   // извлечь MapiMessage (ExtractMessage),
   // извлечь вложения сообщения (ExtractAttachments),
   // сохранить сообщение в поток (SaveMessageToStream).
}
foreach (var msgId in folder.EnumerateMessagesEntryId())
{
    var transportMessageHeaders =
        pst.ExtractProperty(Convert.FromBase64String(msgId), KnownPropertyList.TransportMessageHeaders.Tag)
            .GetString();
}
foreach (var msgId in folder.EnumerateMessagesEntryId())
{
   var attachments = pst.ExtractAttachments(msgId);
}
using var pst = PersonalStorage.FromFile(@"storage.pst");

var builder = new PersonalStorageQueryBuilder();
// Непрочитанные сообщения
builder.HasNoFlags(MapiMessageFlags.MSGFLAG_READ);

foreach (var folder in pst.RootFolder.EnumerateFolders())
{
    var unread = folder.GetContents(builder.GetQuery());
}

Вместо использования:

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