I use Exchang Web Services 2010 to try and read all unread emails from a mailbox, and then mark them as read.
I proceed from this example:
http://msdn.microsoft.com/en-us/library/exchange/aa563373(v=exchg.140).aspx
And they came up with this to find all unread letters and read the contents of the body:
//Set up the connection to exchange service ExchangeServiceBinding exchangeService = new ExchangeServiceBinding(); exchangeService.Credentials = new NetworkCredential("userid", "password", "domain"); exchangeService.Url = "https://exchangeserver/ews/exchange.asmx"; //REturn all properties FindItemType findType = new FindItemType(); findType.Traversal = ItemQueryTraversalType.Shallow; findType.ItemShape = new ItemResponseShapeType(); findType.ItemShape.BaseShape = DefaultShapeNamesType.AllProperties; //Only search the inbox DistinguishedFolderIdType[] foldersToSearch = new DistinguishedFolderIdType[1]; foldersToSearch[0] = new DistinguishedFolderIdType(); foldersToSearch[0].Id = DistinguishedFolderIdNameType.inbox; findType.ParentFolderIds = foldersToSearch; //Only unread emails RestrictionType restriction = new RestrictionType(); IsEqualToType isEqualTo = new IsEqualToType(); PathToUnindexedFieldType pathToFieldType = new PathToUnindexedFieldType(); pathToFieldType.FieldURI = UnindexedFieldURIType.messageIsRead; //Not IsRead FieldURIOrConstantType constantType = new FieldURIOrConstantType(); ConstantValueType constantValueType = new ConstantValueType(); constantValueType.Value = "0"; constantType.Item = constantValueType; isEqualTo.Item = pathToFieldType; isEqualTo.FieldURIOrConstant = constantType; restriction.Item = isEqualTo; //set the not IsRead restriction findType.Restriction = restriction; try { FindItemResponseType findResponse = exchangeService.FindItem(findType); ResponseMessageType[] responseMessType = findResponse.ResponseMessages.Items; List<ItemIdType> unreadItemIds = new List<ItemIdType>(); //get all unread item IDs foreach (ResponseMessageType respMessage in responseMessType) { if(respMessage is FindItemResponseMessageType) { FindItemResponseMessageType itemResponse = (FindItemResponseMessageType)respMessage; if (itemResponse.ResponseClass == ResponseClassType.Success) { if (itemResponse.RootFolder.Item != null) { if (itemResponse.RootFolder.Item is ArrayOfRealItemsType) { ArrayOfRealItemsType items = (ArrayOfRealItemsType)itemResponse.RootFolder.Item; if (items.Items != null) { ItemType[] itemTypes = items.Items; foreach (ItemType item in itemTypes) { if (item is MessageType) { unreadItemIds.Add(item.ItemId); } } } } } } } } if (unreadItemIds.Count == 0) MessageBox.Show("No unread emails found"); else { //Get all unread mail messages, display body GetItemType getItemType = new GetItemType(); getItemType.ItemShape = new ItemResponseShapeType(); getItemType.ItemShape.BaseShape = DefaultShapeNamesType.AllProperties; getItemType.ItemShape.BodyType = BodyTypeResponseType.Text; getItemType.ItemShape.BodyTypeSpecified = true; getItemType.ItemIds = unreadItemIds.ToArray(); GetItemResponseType getItemResponse = exchangeService.GetItem(getItemType); if(getItemResponse.ResponseMessages != null) { ArrayOfResponseMessagesType responseMessages = getItemResponse.ResponseMessages; foreach(ResponseMessageType responseMessage in responseMessages.Items) { if (responseMessage is ItemInfoResponseMessageType) { ItemInfoResponseMessageType responseItemInfo = (ItemInfoResponseMessageType)responseMessage; if (responseItemInfo.Items != null) { ArrayOfRealItemsType responseRealItems = (ArrayOfRealItemsType)responseItemInfo.Items; if (responseRealItems.Items != null) { foreach (ItemType responseItemType in responseRealItems.Items) { if (responseItemType is MessageType) { MessageType fullMessage = (MessageType)responseItemType; BodyType body = fullMessage.Body; if (body != null) { MessageBox.Show(body.Value); } } } } } } } } } } catch(Exception ee) { MessageBox.Show(ee.Message +" " + (ee.InnerException ?? new Exception("")).Message); }
This returns a text version of all unread email bodies, however there should be a more efficient way, no?
Does anyone know how I can update my MessageType email address as read and send it to the server?
source share