EWS: Why does not FindItem return all the fields you expected?

FindItem is one of the very useful & powerful functions available in EWS. You can use it on any folder to find any type of item with as complex restrictions as you can think of.

But wait… before you assume you can get everything that you would get from GetItem, It is not truth!

FindItem only returns summary information & following fields are returned ONLY by GetItem and never by FindItem.

Attachments, Body, Categories, CcRecipients, InternetMessageHeaders, ReplyTo, ResponseObjects, ToRecipients, BccRecipients

I have also discovered that although Sender is returned by FindItem, but you only get display name for sender and EmailAddressType & RoutingType are set to null. I asked myself why not… and following is the response I got from people who decided to design it that way.

"Returning the e-mail address to clients would not add much network traffic from the client to the CAS server, it would be a tremendous performance problem for the server itself. FindItem's whole point is to be an extremely efficient operation for the server – because it's potentially returning very large tables of data. The data returned by a FindItem call is often used to display a view (such as a list of items, like in Outlook). Returning the e-mail address as part of FindItem would require one Active Directory (AD) lookup per recipient, which would result in insufficient performance for FindItem. Beyond that, applications that display a table of information would typically only show the display name of a recipient (as Outlook does in the item listing). So, all that put together is why we require clients to call GetItem to find full recipient information. "

References:

https://msdn2.microsoft.com/en-us/library/bb508824.aspx