I'm using Exchange Web Services to connect to a mailbox and look for messages matching certain criteria, using FindItems with a SearchFilter.
I can get emails in a mailbox filtering on 'from' email address like this:
var service = new ExchangeService(ExchangeVersion.Exchange2010_SP1)
{
TraceEnabled = true,
Credentials = new WebCredentials(username, password)
};
var filter = new SearchFilter.ContainsSubstring(EmailMessageSchema.From, "some@email.com");
service.FindItems(WellKnownFolderName.Inbox, filter, new ItemView(50))
And I can filter on the DisplayTo
property like this:
var filter = new SearchFilter.ContainsSubstring(EmailMessageSchema.DisplayTo, "display name");
But as far as I can tell that only searches the recipient's display name. I want to search on an email address or domain name.
This doesn't return results when I would expect it to:
var filter = new SearchFilter.ContainsSubstring(EmailMessageSchema.ToRecipients, "some@email.com");
Is it possible to find all emails where the recipients list contains a specified email address?
I didn't find a way to use a SearchFilter to find emails based on recipient email address.
It is possible using a different overload of ExchangeService.FindItems which takes a querystring.
Finding emails where an address is in the To or Cc fields
var contactEmailAddress = "some@email.com";
var querystring = string.Format("Participants:={0}", contactEmailAddress);
service.FindItems(WellKnownFolderName.Inbox, queryString, view);
Finding emails where an address is in the From, To or Cc fields
var contactEmailAddress = "some@email.com";
var querystring = string.Format("(From:={0} OR Participants:={0})", contactEmailAddress);
service.FindItems(WellKnownFolderName.Inbox, queryString, view);
I think this feature requires Exchange 2010.
Some additional resources on query syntax: