/// <summary> /// Log on to a mailbox with a specified user account and create a search folder. /// </summary> /// <param name="userName">Name of the user.</param> /// <param name="userPassword">Password of the user.</param> /// <param name="userDomain">Domain of the user.</param> /// <param name="searchFolderName">Name of the search folder.</param> /// <param name="searchText">Search text of the search folder.</param> /// <returns>If the search folder is created successfully, return true; otherwise, return false.</returns> public bool CreateSearchFolder(string userName, string userPassword, string userDomain, string searchFolderName, string searchText) { // Log on mailbox with specified user account(userName, userPassword, userDomain). bool isLoged = AdapterHelper.SwitchUser(userName, userPassword, userDomain, this.exchangeServiceBinding, this.Site); Site.Assert.IsTrue( isLoged, string.Format("Log on mailbox with the UserName: {0}, Password: {1}, Domain: {2} should be successful.", userName, userPassword, userDomain)); // Create the request. CreateFolderType createFolder = new CreateFolderType(); SearchFolderType[] folderArray = new SearchFolderType[1]; SearchFolderType searchFolder = new SearchFolderType(); // Use the following search filter to get all mail in the Inbox with the word searchText in the subject line. searchFolder.SearchParameters = new SearchParametersType(); searchFolder.SearchParameters.Traversal = SearchFolderTraversalType.Deep; searchFolder.SearchParameters.TraversalSpecified = true; searchFolder.SearchParameters.BaseFolderIds = new DistinguishedFolderIdType[4]; // Create a distinguished folder Identified of the inbox folder. DistinguishedFolderIdType inboxFolder = new DistinguishedFolderIdType(); inboxFolder.Id = new DistinguishedFolderIdNameType(); inboxFolder.Id = DistinguishedFolderIdNameType.inbox; searchFolder.SearchParameters.BaseFolderIds[0] = inboxFolder; DistinguishedFolderIdType contactType = new DistinguishedFolderIdType(); contactType.Id = new DistinguishedFolderIdNameType(); contactType.Id = DistinguishedFolderIdNameType.contacts; searchFolder.SearchParameters.BaseFolderIds[1] = contactType; DistinguishedFolderIdType calendarType = new DistinguishedFolderIdType(); calendarType.Id = new DistinguishedFolderIdNameType(); calendarType.Id = DistinguishedFolderIdNameType.calendar; searchFolder.SearchParameters.BaseFolderIds[2] = calendarType; DistinguishedFolderIdType taskType = new DistinguishedFolderIdType(); taskType.Id = new DistinguishedFolderIdNameType(); taskType.Id = DistinguishedFolderIdNameType.calendar; searchFolder.SearchParameters.BaseFolderIds[3] = taskType; // Use the following search filter. searchFolder.SearchParameters.Restriction = new RestrictionType(); PathToUnindexedFieldType path = new PathToUnindexedFieldType(); path.FieldURI = UnindexedFieldURIType.itemSubject; RestrictionType restriction = new RestrictionType(); FieldURIOrConstantType fieldURIORConstant = new FieldURIOrConstantType(); fieldURIORConstant.Item = new ConstantValueType(); (fieldURIORConstant.Item as ConstantValueType).Value = searchText; ExistsType isEqual = new ExistsType(); isEqual.Item = path; restriction.Item = isEqual; searchFolder.SearchParameters.Restriction = restriction; // Give the search folder a unique name. searchFolder.DisplayName = searchFolderName; folderArray[0] = searchFolder; // Create the search folder under the default Search Folder. TargetFolderIdType targetFolder = new TargetFolderIdType(); DistinguishedFolderIdType searchFolders = new DistinguishedFolderIdType(); searchFolders.Id = DistinguishedFolderIdNameType.searchfolders; targetFolder.Item = searchFolders; createFolder.ParentFolderId = targetFolder; createFolder.Folders = folderArray; bool isSearchFolderCreated = false; // Invoke CreateFolder operation and get the response. CreateFolderResponseType response = this.exchangeServiceBinding.CreateFolder(createFolder); if (response != null && ResponseClassType.Success == response.ResponseMessages.Items[0].ResponseClass) { // If the search folder is created successfully, return true; otherwise, return false. isSearchFolderCreated = true; searchFolder.FolderId = ((FolderInfoResponseMessageType)response.ResponseMessages.Items[0]).Folders[0].FolderId; AdapterHelper.CreatedFolders.Add(searchFolder); } return isSearchFolderCreated; }
/// <summary> /// Set related folder properties of create folder request /// </summary> /// <param name="displayNames">Display names of folders that will be set into create folder request.</param> /// <param name="folderClasses">Folder class values of folders that will be set into create folder request.</param> /// <param name="folderPermissions">Folder permission values of folders that will be set into create folder request. </param> /// <param name="createFolderRequest">Create folder request instance that needs to set property values.</param> /// <returns>Create folder request instance that have folder property value configured.</returns> protected CreateFolderType ConfigureFolderProperty(string[] displayNames, string[] folderClasses, PermissionSetType[] folderPermissions, CreateFolderType createFolderRequest) { Site.Assert.IsNotNull(displayNames, "Display names should not be null!"); Site.Assert.IsNotNull(folderClasses, "Folder classes should not be null!"); Site.Assert.AreEqual<int>(displayNames.Length, folderClasses.Length, "Folder names count should equals to folder class value count!"); if (folderPermissions != null) { Site.Assert.AreEqual<int>(displayNames.Length, folderPermissions.Length, "Folder names count should equals to folder permission value count!"); } int folderCount = displayNames.Length; createFolderRequest.Folders = new BaseFolderType[folderCount]; for (int folderPropertyIndex = 0; folderPropertyIndex < folderCount; folderPropertyIndex++) { string folderResourceName = Common.GenerateResourceName(this.Site, displayNames[folderPropertyIndex]); if (folderClasses[folderPropertyIndex] == "IPF.Appointment") { CalendarFolderType calendarFolder = new CalendarFolderType(); calendarFolder.DisplayName = folderResourceName; createFolderRequest.Folders[folderPropertyIndex] = calendarFolder; } else if (folderClasses[folderPropertyIndex] == "IPF.Contact") { ContactsFolderType contactFolder = new ContactsFolderType(); contactFolder.DisplayName = folderResourceName; if (folderPermissions != null) { contactFolder.PermissionSet = folderPermissions[folderPropertyIndex]; } createFolderRequest.Folders[folderPropertyIndex] = contactFolder; } else if (folderClasses[folderPropertyIndex] == "IPF.Task") { TasksFolderType taskFolder = new TasksFolderType(); taskFolder.DisplayName = folderResourceName; if (folderPermissions != null) { taskFolder.PermissionSet = folderPermissions[folderPropertyIndex]; } createFolderRequest.Folders[folderPropertyIndex] = taskFolder; } else if (folderClasses[folderPropertyIndex] == "IPF.Search") { SearchFolderType searchFolder = new SearchFolderType(); searchFolder.DisplayName = folderResourceName; // Set search parameters. searchFolder.SearchParameters = new SearchParametersType(); searchFolder.SearchParameters.Traversal = SearchFolderTraversalType.Deep; searchFolder.SearchParameters.TraversalSpecified = true; searchFolder.SearchParameters.BaseFolderIds = new DistinguishedFolderIdType[1]; DistinguishedFolderIdType inboxType = new DistinguishedFolderIdType(); inboxType.Id = new DistinguishedFolderIdNameType(); inboxType.Id = DistinguishedFolderIdNameType.inbox; searchFolder.SearchParameters.BaseFolderIds[0] = inboxType; // Use the following search filter searchFolder.SearchParameters.Restriction = new RestrictionType(); PathToUnindexedFieldType path = new PathToUnindexedFieldType(); path.FieldURI = UnindexedFieldURIType.itemSubject; RestrictionType restriction = new RestrictionType(); ExistsType isEqual = new ExistsType(); isEqual.Item = path; restriction.Item = isEqual; searchFolder.SearchParameters.Restriction = restriction; if (folderPermissions != null) { searchFolder.PermissionSet = folderPermissions[folderPropertyIndex]; } createFolderRequest.Folders[folderPropertyIndex] = searchFolder; } else { // Set Display Name and Folder Class for the folder to be created. FolderType folder = new FolderType(); folder.DisplayName = folderResourceName; folder.FolderClass = folderClasses[folderPropertyIndex]; if (folderPermissions != null) { folder.PermissionSet = folderPermissions[folderPropertyIndex]; } createFolderRequest.Folders[folderPropertyIndex] = folder; } } return createFolderRequest; }