/// <summary> /// This is a recursive method to display contents of a folder /// </summary> /// <param name="folderInfo"></param> /// <param name="pst"></param> private static void DisplayFolderContents(FolderInfo folderInfo, PersonalStorage pst) { // ExStart:GetMessageInformationDisplayFolderContents // Display the folder name Console.WriteLine("Folder: " + folderInfo.DisplayName); Console.WriteLine("=================================="); // Display information about messages inside this folder MessageInfoCollection messageInfoCollection = folderInfo.GetContents(); foreach (MessageInfo messageInfo in messageInfoCollection) { Console.WriteLine("Subject: " + messageInfo.Subject); Console.WriteLine("Sender: " + messageInfo.SenderRepresentativeName); Console.WriteLine("Recipients: " + messageInfo.DisplayTo); Console.WriteLine("------------------------------"); } // Call this method recursively for each subfolder if (folderInfo.HasSubFolders == true) { foreach (FolderInfo subfolderInfo in folderInfo.GetSubFolders()) { DisplayFolderContents(subfolderInfo, pst); } } // ExEnd:GetMessageInformationDisplayFolderContents }
private MessageInfo GetEmailMessagesById(FolderInfo folderInfo, string fieldId) { MessageInfo result = null; MessageInfoCollection messageInfoCollection = folderInfo.GetContents(); foreach (MessageInfo messageInfo in messageInfoCollection) { if (messageInfo.EntryIdString == fieldId) { result = messageInfo; break; } } if (result == null && folderInfo.HasSubFolders) { foreach (FolderInfo subfolderInfo in folderInfo.GetSubFolders()) { result = GetEmailMessagesById(subfolderInfo, fieldId); if (result != null) { break; } } } return(result); }
/// <summary> /// This is a recursive method to display contents of a folder /// </summary> /// <param name="folderInfo"></param> /// <param name="pst"></param> private static void ExtractMsgFiles(FolderInfo folderInfo, PersonalStorage pst) { // ExStart:ExtractMessagesFromPSTFileExtractMsgFiles // display the folder name Console.WriteLine("Folder: " + folderInfo.DisplayName); Console.WriteLine("=================================="); // loop through all the messages in this folder MessageInfoCollection messageInfoCollection = folderInfo.GetContents(); foreach (MessageInfo messageInfo in messageInfoCollection) { Console.WriteLine("Saving message {0} ....", messageInfo.Subject); // get the message in MapiMessage instance MapiMessage message = pst.ExtractMessage(messageInfo); // save this message to disk in msg format message.Save(message.Subject.Replace(":", " ") + ".msg"); // save this message to stream in msg format MemoryStream messageStream = new MemoryStream(); message.Save(messageStream); } // Call this method recursively for each subfolder if (folderInfo.HasSubFolders == true) { foreach (FolderInfo subfolderInfo in folderInfo.GetSubFolders()) { ExtractMsgFiles(subfolderInfo, pst); } } // ExEnd:ExtractMessagesFromPSTFileExtractMsgFiles }
static void CountContents(FolderInfo folder) { FolderInfoCollection rootFolders = folder.GetSubFolders(); totalItems += folder.ContentCount; if (folder.ContentCount > 0) { //foreach (var message in folder.GetContents(i, 50)) foreach (var message in folder.EnumerateMapiMessages()) { var mi = new MessageInfo { Id = message.InternetMessageId, Subject = message.Subject, AttachmentCount = message.Attachments.Count }; Console.WriteLine(mi.Subject); outputData.Add(mi); } } Console.WriteLine(folder.DisplayName + ": " + folder.ContentCount.ToString()); foreach (FolderInfo subFolder in rootFolders) { // totalItems += subFolder.GetSubFolders().Count(); CountContents(subFolder); } }
void HandleFolderAndSubfolders(Action <MapiMessage> handler, FolderInfo folderInfo, MailConversionOptions options) { foreach (MapiMessage mapiMessage in folderInfo.EnumerateMapiMessages()) { handler(mapiMessage); } if (folderInfo.HasSubFolders == true) { foreach (FolderInfo subfolderInfo in folderInfo.GetSubFolders()) { HandleFolderAndSubfolders(handler, subfolderInfo, options); } } }
// Walk the folder structure recursively private static void WalkFolders(FolderInfo folder, string parentFolderName, IList<string> folderData) { //ExStart:ParseSearchableFolders-WalkFolders string displayName = (string.IsNullOrEmpty(folder.DisplayName)) ? "ROOT" : folder.DisplayName; string folderNames = string.Format("DisplayName = {0}; Parent.DisplayName = {1}", displayName, parentFolderName); folderData.Add(folderNames); if (displayName == "Finder") { Console.WriteLine("Test this case"); } if (!folder.HasSubFolders) { return; } FolderInfoCollection coll = folder.GetSubFolders(FolderKind.Search | FolderKind.Normal); foreach (FolderInfo subfolder in coll) { WalkFolders(subfolder, displayName, folderData); } //ExEnd:ParseSearchableFolders-WalkFolders }
// Walk the folder structure recursively private static void WalkFolders(FolderInfo folder, string parentFolderName, IList <string> folderData) { string displayName = (string.IsNullOrEmpty(folder.DisplayName)) ? "ROOT" : folder.DisplayName; string folderNames = string.Format("DisplayName = {0}; Parent.DisplayName = {1}", displayName, parentFolderName); folderData.Add(folderNames); if (displayName == "Finder") { Console.WriteLine("Test this case"); } if (!folder.HasSubFolders) { return; } FolderInfoCollection coll = folder.GetSubFolders(FolderKind.Search | FolderKind.Normal); foreach (FolderInfo subfolder in coll) { WalkFolders(subfolder, displayName, folderData); } }
public static void Run() { // ExStart:SearchMessagesAndFoldersInPST // The path to the File directory. string dataDir = RunExamples.GetDataDir_Outlook(); using (PersonalStorage personalStorage = PersonalStorage.FromFile(dataDir + "Outlook.pst")) { FolderInfo folder = personalStorage.RootFolder.GetSubFolder("Inbox"); PersonalStorageQueryBuilder builder = new PersonalStorageQueryBuilder(); // High importance messages builder.Importance.Equals((int)MapiImportance.High); MessageInfoCollection messages = folder.GetContents(builder.GetQuery()); Console.WriteLine("Messages with High Imp:" + messages.Count); builder = new PersonalStorageQueryBuilder(); builder.MessageClass.Equals("IPM.Note"); messages = folder.GetContents(builder.GetQuery()); Console.WriteLine("Messages with IPM.Note:" + messages.Count); builder = new PersonalStorageQueryBuilder(); // Messages with attachments AND high importance builder.Importance.Equals((int)MapiImportance.High); builder.HasFlags(MapiMessageFlags.MSGFLAG_HASATTACH); messages = folder.GetContents(builder.GetQuery()); Console.WriteLine("Messages with atts: " + messages.Count); builder = new PersonalStorageQueryBuilder(); // Messages with size > 15 KB builder.MessageSize.Greater(15000); messages = folder.GetContents(builder.GetQuery()); Console.WriteLine("messags size > 15Kb:" + messages.Count); builder = new PersonalStorageQueryBuilder(); // Unread messages builder.HasNoFlags(MapiMessageFlags.MSGFLAG_READ); messages = folder.GetContents(builder.GetQuery()); Console.WriteLine("Unread:" + messages.Count); builder = new PersonalStorageQueryBuilder(); // Unread messages with attachments builder.HasNoFlags(MapiMessageFlags.MSGFLAG_READ); builder.HasFlags(MapiMessageFlags.MSGFLAG_HASATTACH); messages = folder.GetContents(builder.GetQuery()); Console.WriteLine("Unread msgs with atts: " + messages.Count); // Folder with name of 'SubInbox' builder = new PersonalStorageQueryBuilder(); builder.FolderName.Equals("SubInbox"); FolderInfoCollection folders = folder.GetSubFolders(builder.GetQuery()); Console.WriteLine("Folder having subfolder: " + folders.Count); builder = new PersonalStorageQueryBuilder(); // Folders with subfolders builder.HasSubfolders(); folders = folder.GetSubFolders(builder.GetQuery()); Console.WriteLine(folders.Count); } // ExEnd:SearchMessagesAndFoldersInPST }