Sample: How to get the number of file attachments with EWS.
Since HasAttachments does not really give you the number of file attachments, we you will find that you need to work around it. You can use code like that below to get the real count of file attachments on an item.
// -----------------------------------------------------------------------------------------
// GetFileAttachmentsCount
// Returns number of attachments on an item.
// -----------------------------------------------------------------------------------------
public static int GetFileAttachmentsCount(ExchangeServiceBinding binding, ItemIdType id)
{
int iAttachmentCount = 0;
// Use GetItem on the Id to get the Attachments collection
GetItemType getItemRequest = new GetItemType();
getItemRequest.ItemIds = new ItemIdType[] { id };
getItemRequest.ItemShape = new ItemResponseShapeType();
getItemRequest.ItemShape.BaseShape = DefaultShapeNamesType.AllProperties;
PathToUnindexedFieldType hasAttachPath = new PathToUnindexedFieldType();
hasAttachPath.FieldURI = UnindexedFieldURIType.itemHasAttachments;
PathToUnindexedFieldType attachmentsPath = new PathToUnindexedFieldType();
attachmentsPath.FieldURI = UnindexedFieldURIType.itemAttachments;
// Add additional properties?
getItemRequest.ItemShape.AdditionalProperties = new BasePathToElementType[]{
hasAttachPath, attachmentsPath };
GetItemResponseType getItemResponse = binding.GetItem(getItemRequest);
ItemInfoResponseMessageType getItemResponseMessage = getItemResponse.ResponseMessages.Items[0] as ItemInfoResponseMessageType;
if (getItemResponseMessage.ResponseCode == ResponseCodeType.NoError)
{
ItemType item = getItemResponseMessage.Items.Items[0];
// Don't rely on HasAttachments - It does not mean what you thing it would.
if ((item.Attachments != null) && (item.Attachments.Length > 0))
{
for (int attachmentIndex = 0; attachmentIndex < item.Attachments.Length; attachmentIndex++)
{
FileAttachmentType almostAnAttachment = item.Attachments[attachmentIndex] as FileAttachmentType;
if (almostAnAttachment != null)
{
iAttachmentCount += 1;
}
}
}
}
return iAttachmentCount;
}
Comments
Anonymous
January 09, 2009
Here is a helpful sample of using EWS to get a list of calendar items and displaying them in a ListView.Anonymous
September 15, 2011
Thanks Dan for this post. I am new to EWS development, could you please tell me how can I get ItemIDType. which i need to pass in this function GetFileAttachmentsCount()Anonymous
September 16, 2011
hi Dan, Please ignore my previous comment now I am able to get Attachment count. Thanks for our post. Now I want to download attachment on local file system, Could you please tell me how can we do this?