Working with Large PST Files

Contents
[ ]

Performance may be degraded when processing large PST files. The following solutions will help you improve the performance of your app when processing large storage files.

using var pst = PersonalStorage.FromFile(@"storage.pst"); foreach (var folder in pst.RootFolder.EnumerateFolders()) foreach (var messageInfo in folder.EnumerateMessages()) { // Do something with message } 
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}"); } 
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). } 
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(); // Unread messages builder.HasNoFlags(MapiMessageFlags.MSGFLAG_READ); foreach (var folder in pst.RootFolder.EnumerateFolders()) { var unread = folder.GetContents(builder.GetQuery()); } 

Instead of using:

foreach (var id in folder.EnumerateMessagesEntryId()) { var msg = pst.ExtractMessage(id); msg.Save(@"message.msg"); } 

Use:

foreach (var id in folder.EnumerateMessagesEntryId()) { pst.SaveMessageToStream(id, File.OpenWrite(@"message.msg")); }