Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Here is another sample for building a complex search criteria for Finding items. We use the SearchFilter and SearchFilterCollection to build the “Restriction”. In short we are finding items which have a User Property called X-State AND the value of X-State is not (3 OR 4 OR 5) AND the ItemClass is IPM.Note.Exchange AND the mail is received after a certain date.
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Exchange.WebServices.Data;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
using System.Xml;
namespace ListTopLevelFolders
{
class Program
{
static void Main(string[] args)
{
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010);
//Change the Credentials to suit you needs
service.Credentials = new WebCredentials("akashb", "Password", "domain");
//Use Autodiscover or Set the URL manually. Change the email address to match yours
service.AutodiscoverUrl("user@domain.com");
SearchItemsInAFolder(service);
Console.ReadLine();
}
static void SearchItemsInAFolder(ExchangeService service)
{
// The User Property to Search
ExtendedPropertyDefinition X_STATE =
new ExtendedPropertyDefinition(DefaultExtendedPropertySet.PublicStrings, "X-STATE", MapiPropertyType.String);
// Condition for checking if X_STATE value is 3,4,5
List<SearchFilter> searchORFilterCollection = new List<SearchFilter>();
searchORFilterCollection.Add(new SearchFilter.IsEqualTo(X_STATE, 3));
searchORFilterCollection.Add(new SearchFilter.IsEqualTo(X_STATE, 4));
searchORFilterCollection.Add(new SearchFilter.IsEqualTo(X_STATE, 5));
//Negating the above condition. Effectively X_STATE value is NOT 3 OR 4 OR 5
SearchFilter searchNotFilter =
new SearchFilter.Not(new SearchFilter.SearchFilterCollection(LogicalOperator.Or, searchORFilterCollection.ToArray()));
// AND the ItemClass is IPM.Note.Exchange
// We create a new Search Filter collection and add a new IsEqualTo and then AND it with the
// previous search filter.
List<SearchFilter> searchANDFilterCollection = new List<SearchFilter>();
searchANDFilterCollection.Add(new SearchFilter.IsEqualTo(EmailMessageSchema.ItemClass, "IPM.Note.Exchange"));
searchANDFilterCollection.Add(searchNotFilter);
// X_STATE is Not 3 OR 4 OR 5 AND ItemClass is IPM.Note.Exchange
SearchFilter searchANDFilter =
new SearchFilter.SearchFilterCollection(LogicalOperator.And, searchANDFilterCollection.ToArray());
// Condition for checking if X_STATE Exists in that Item
// AND the User Property Exists on the items.
// We create a new Search Filter collection and add a new Exists condition and then AND it with the
// previous search filter.
List<SearchFilter> searchANDFilterCollection2 = new List<SearchFilter>();
searchANDFilterCollection2.Add(new SearchFilter.Exists(X_STATE));
searchANDFilterCollection2.Add(searchANDFilter);
SearchFilter searchANDFilter2 = new SearchFilter.SearchFilterCollection(LogicalOperator.And, searchANDFilterCollection2.ToArray());
// Condition for checking if the mail has been recievd before a specific time.
// AND the mails have been received after a certain time.
// We create a new Search Filter collection and add a new IsGreaterThan condition and then AND it with the
// previous search filter.
List<SearchFilter> searchANDFilterCollection3 = new List<SearchFilter>();
searchANDFilterCollection3.Add(new SearchFilter.IsGreaterThan(EmailMessageSchema.DateTimeReceived, DateTime.Parse("2010-03-01T18:30:00Z")));
searchANDFilterCollection3.Add(searchANDFilter2);
SearchFilter FinalsearchFilter = new SearchFilter.SearchFilterCollection(LogicalOperator.And, searchANDFilterCollection3.ToArray());
// Create a view with a page size of 50.
ItemView view = new ItemView(50);
// Indicate that the base property and the User Property will be returned
view.PropertySet = new PropertySet(BasePropertySet.FirstClassProperties, X_STATE);
// Order the search results by the DateTimeReceived in descending order.
view.OrderBy.Add(ItemSchema.DateTimeReceived, SortDirection.Descending);
// Set the traversal to shallow. (Shallow is the default option; other options are Associated and SoftDeleted.)
view.Traversal = ItemTraversal.Shallow;
// Send the request to search the Inbox and get the results.
FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.Inbox, FinalsearchFilter, view);
// Process each item.
if (findResults.Items.Count > 0)
{
foreach (Item myItem in findResults.Items)
{
if (myItem is EmailMessage)
{
Console.WriteLine((myItem as EmailMessage).Subject);
}
if (myItem.ExtendedProperties.Count > 0)
{
// Display the extended property's name and property.
foreach (ExtendedProperty extendedProperty in myItem.ExtendedProperties)
{
Console.WriteLine(" Extended Property Name: " + extendedProperty.PropertyDefinition.Name);
Console.WriteLine(" Extended Property Value: " + extendedProperty.Value);
}
}
}
}
else
{
Console.WriteLine("No Items Found!");
}
}
}
}
Enjoy!
Comments
- Anonymous
December 04, 2011
Hi akashGreat article!!!!Can you please inform me how can we read mails from a particular user defined folder. - Anonymous
December 05, 2011
You will have to do a FindFolder first to get the folder ID and then use the Folder ID in the FindItems call.