/// <summary> /// For each specified sahred mailbox, if the user has access to the mailbox, /// items matching the search term are sought-out. Each of the specified folders in the user's personal mailbox are also searched. /// </summary> /// <param name="credentials">The user credntials to impersonate in the mail system.</param> /// <param name="sharedMailBoxNames">The names of the shared mailboxes to search.</param> /// <param name="mailFolderNames">The names of the folders in the user's personal mail box to search.</param> /// <param name="searchTerm">The term that results must contain. This is case insensitive.</param> /// <returns>Mail items that match the search term or an empty result (i.e. never null).</returns> public IEnumerable<MailItem> FindItems(MailBoxCredentials credentials, MailSearchContainerNameList sharedMailBoxNames, MailSearchContainerNameList mailFolderNames, string searchTerm) { if (credentials == null || String.IsNullOrEmpty(credentials.UserName)) { throw new UnauthorizedAccessException("No user to impersonate specified."); } var result = new List<MailItem>(); if (String.IsNullOrEmpty(searchTerm) || ((sharedMailBoxNames == null || sharedMailBoxNames.Count <= 0) && (mailFolderNames == null || mailFolderNames.Count <= 0))) { return result; } var ewsURL = configuration.EWSURL; var networkDomain = configuration.EWSNetworkDomain; var networkUserName = configuration.EWSNetworkUserName; var networkPassword = configuration.EWSNetworkPassword; var mailDomain = configuration.MailDomain; var searchFilters = new Microsoft.Exchange.WebServices.Data.SearchFilter.SearchFilterCollection (LogicalOperator.Or, new SearchFilter[5]{new SearchFilter.ContainsSubstring(EmailMessageSchema.Body, searchTerm), new SearchFilter.ContainsSubstring(EmailMessageSchema.Subject, searchTerm), new SearchFilter.ContainsSubstring(EmailMessageSchema.Sender, searchTerm), new SearchFilter.ContainsSubstring(EmailMessageSchema.ToRecipients, searchTerm), new SearchFilter.ContainsSubstring(EmailMessageSchema.Attachments, searchTerm) }); var service = ConfigureMSExchangeService(networkUserName, networkPassword, networkDomain, ewsURL, credentials); var iv = new ItemView(VIEW_SIZE); iv.PropertySet = new PropertySet(BasePropertySet.IdOnly, ItemSchema.Subject, ItemSchema.DateTimeReceived); var shareMailBoxMatches = SearchSharedMailBoxes(service, iv, searchFilters, sharedMailBoxNames, configuration.MailDomain, searchTerm); if (sharedMailBoxNames != null) result.AddRange(shareMailBoxMatches); var mailFolderMatches = SearchMailFolders(service, iv, searchFilters, mailFolderNames, searchTerm); if (mailFolderMatches != null) result.AddRange(mailFolderMatches); return result; }
public void TestHandlesNoPersonalMailFolders() { var credentials = new MailBoxCredentials { UserName = "******", DomainName = "entemea.google.com" }; var sharedMailBoxes = new MailSearchContainerNameList(new string[1] { "" }); _target.FindItems(credentials, sharedMailBoxes, null, null); }
public void TestHandlesNoSearchTerm() { var credentials = new MailBoxCredentials { UserName = "******", DomainName = "entemea.google.com" }; var sharedMailBoxes = new MailSearchContainerNameList(new string[2] { "sharedmailbox", "ghdsharedtest" }); var personalMailFolders = new MailSearchContainerNameList(new string[1] { "InBox" }); _target.FindItems(credentials, sharedMailBoxes, personalMailFolders, null); }
public void TestCanRequestMailSearch() { var expectedMailBoxCredentials = new MailBoxCredentials{UserName = TEST_USER_NAME, DomainName = TEST_DOMAIN }; var searchTerm = "quote"; Expect.Call(msxConnector.FindItems(expectedMailBoxCredentials, TEST_SHARED_MAILBOX_NAMES, TEST_MAIL_FOLDER_NAMES, searchTerm)) .Return(null); mocks.ReplayAll(); var results = target.SearchForMail(searchTerm, TEST_USER_NAME); }
private ExchangeService ConfigureMSExchangeService(string networkUserName, string networkPassword, string networkDomain, string serviceURL, MailBoxCredentials impersonationCredentials) { ServicePointManager.ServerCertificateValidationCallback = CertificateValidationCallback; var service = new ExchangeService(ExchangeVersion.Exchange2010_SP1); service.Credentials = new NetworkCredential(networkUserName, networkPassword, networkDomain); service.Url = new System.Uri(serviceURL); service.ImpersonatedUserId = new ImpersonatedUserId { Id = String.Format("{0}@{1}", impersonationCredentials.UserName, impersonationCredentials.DomainName), IdType = ConnectingIdType.SmtpAddress }; return service; }
public void TestSearchesSharedMailBoxes() { var credentials = new MailBoxCredentials { UserName = "******", DomainName = "entemea.google.com" }; var searchTerm = "test"; var sharedMailBoxes = new MailSearchContainerNameList(new string[2] { "sharedmailbox", "ghdsharedtest" }); _target.FindItems(credentials, sharedMailBoxes, null, searchTerm); }
public void TestSearchesMailFolders() { var credentials = new MailBoxCredentials { UserName = "******", DomainName = "entemea.google.com" }; var searchTerm = "test"; MailSearchContainerNameList sharedMailBoxes = null; var mailFolderNames = new MailSearchContainerNameList(new string[1] { "Inbox" }); _target.FindItems(credentials, sharedMailBoxes, mailFolderNames, searchTerm); }
public void TestHandlesNoSharedMailBoxes() { var credentials = new MailBoxCredentials { UserName="******", DomainName = "entemea.google.com"}; _target.FindItems(credentials, null, null, null); }
public void TestDoesNotAllowEmptyCredentials() { var credentials = new MailBoxCredentials(); _target.FindItems(credentials, null, null, null); }