How do i retrieve the Item ID of each email using Exchange Web Service

Asked By Ivan Ben Ker
02-Sep-10 12:18 AM
Earn up to 30 extra points for answering this tough question.
Hello,

I am new to Exchange Web Service but i have somehow managed to retrieve the information using EWS and written the data into an XML file. Now i need to write the ItemID of the emails retrieved into the XML so that i may later on use it to delete the email message. But i do not need to delete all processed emails only those that i require(Which i will add on the conditions in my application)

Below are my codes on retrieving and writing into the XML, can someone assist me in capturing the ItemID ?

Dim exchangeServer As New ExchangeServiceBinding()
        Dim creds As New NetworkCredential(strUserName, strUserPwd, strDomain)
        exchangeServer.Url = strServerName
        exchangeServer.Credentials = creds

 

        Dim folderIDArray As DistinguishedFolderIdType() = New DistinguishedFolderIdType(0) {}
        folderIDArray(0) = New DistinguishedFolderIdType()
        folderIDArray(0).Id = DistinguishedFolderIdNameType.inbox

        Dim ptuftDisplayName As New PathToUnindexedFieldType()
        ptuftDisplayName.FieldURI = UnindexedFieldURIType.folderDisplayName

        Dim pteftComment As New PathToExtendedFieldType()
        pteftComment.PropertyTag = "0x3004"
        pteftComment.PropertyType = MapiPropertyTypeType.[String]

        Dim myfoldertype As New GetFolderType()
        myfoldertype.FolderIds = folderIDArray
        myfoldertype.FolderShape = New FolderResponseShapeType()
        myfoldertype.FolderShape.BaseShape = DefaultShapeNamesType.IdOnly
        myfoldertype.FolderShape.AdditionalProperties = New BasePathToElementType(1) {}
        myfoldertype.FolderShape.AdditionalProperties(0) = ptuftDisplayName
        myfoldertype.FolderShape.AdditionalProperties(1) = pteftComment

        Dim myFolder As GetFolderResponseType
        myFolder = exchangeServer.GetFolder(myfoldertype)

        Dim firmtInbox As FolderInfoResponseMessageType = DirectCast(myFolder.ResponseMessages.Items(0), FolderInfoResponseMessageType)

        Dim ptuftSubject As New PathToUnindexedFieldType()
        ptuftSubject.FieldURI = UnindexedFieldURIType.itemSubject

        Dim ptuftBody As New PathToUnindexedFieldType()
        ptuftBody.FieldURI = UnindexedFieldURIType.itemAttachments

        Dim pteftFlagStatus As New PathToExtendedFieldType()
        pteftFlagStatus.PropertyTag = "0x1090"
        pteftFlagStatus.PropertyType = MapiPropertyTypeType.[Integer]

        Dim findItemRequest As New FindItemType()
        findItemRequest.Traversal = ItemQueryTraversalType.Shallow
        findItemRequest.ItemShape = New ItemResponseShapeType()
        findItemRequest.ItemShape.BaseShape = DefaultShapeNamesType.AllProperties

        findItemRequest.ParentFolderIds = New FolderIdType(0) {}
        findItemRequest.ParentFolderIds(0) = firmtInbox.Folders(0).FolderId

        Dim firt As FindItemResponseType = exchangeServer.FindItem(findItemRequest)

        p_strFileName = "EmailReader_" & GetFormatDate() & ".xml"
        Dim xmlWriter As New XmlTextWriter(p_strFileName, System.Text.Encoding.UTF8)

        xmlWriter.Formatting = Formatting.Indented
        xmlWriter.WriteRaw("<?xml version=""1.0""?>")
        xmlWriter.WriteStartElement("a:multistatus")
        xmlWriter.WriteAttributeString("xmlns:b", "urn:uuid:c2f41010-65b3-11d1-a29f-00aa00c14882/")
        xmlWriter.WriteAttributeString("xmlns:d", "urn:schemas:httpmail:")
        xmlWriter.WriteAttributeString("xmlns:c", "xml:")
        xmlWriter.WriteAttributeString("xmlns:a", "DAV:")

        For Each firmtMessage As FindItemResponseMessageType In firt.ResponseMessages.Items
          If firmtMessage.RootFolder.TotalItemsInView > 0 Then
            For Each it As ItemType In DirectCast(firmtMessage.RootFolder.Item, ArrayOfRealItemsType).Items
              Dim getItemRequest As New GetItemType()
              getItemRequest.ItemIds = New BaseItemIdType(0) {}
              getItemRequest.ItemIds(0) = DirectCast(it.ItemId, BaseItemIdType)
              getItemRequest.ItemShape = New ItemResponseShapeType()
              getItemRequest.ItemShape.BaseShape = DefaultShapeNamesType.AllProperties
              getItemRequest.ItemShape.IncludeMimeContent = True
              Dim getItemResponse As GetItemResponseType = exchangeServer.GetItem(getItemRequest)

              Dim getItemResponseMessage As ItemInfoResponseMessageType = TryCast(getItemResponse.ResponseMessages.Items(0), ItemInfoResponseMessageType)
              xmlWriter.WriteStartElement("a:response")
              xmlWriter.WriteElementString("a:href", "")
              xmlWriter.WriteStartElement("a:propstat")
              xmlWriter.WriteStartElement("a:prop")
              xmlWriter.WriteElementString("a:displayname", it.Subject)
              xmlWriter.WriteElementString("d:date", it.DateTimeReceived.ToLocalTime())
              xmlWriter.WriteElementString("d:from", DirectCast(getItemResponseMessage.Items.Items(0), MessageType).From.Item.EmailAddress)
              xmlWriter.WriteElementString("d:to", DirectCast(getItemResponseMessage.Items.Items(0), MessageType).DisplayTo.ToString)
              xmlWriter.WriteElementString("d:subject", it.Subject)
              xmlWriter.WriteElementString("d:htmldescription", getItemResponseMessage.Items.Items(0).Body.Value.ToString())
              p_intCounter = p_intCounter + 1
            Next
          End If
        Next

Create New Account
ItemID ? Dim exchangeServer As New ExchangeServiceBinding() Dim creds As New NetworkCredential(strUserName, strUserPwd, strDomain) exchangeServer.Url = strServerName exchangeServer.Credentials = creds Dim Formatting = Formatting.Indented xmlWriter.WriteRaw("<?xml version = ""1.0""?> ") xmlWriter.WriteStartElement("a:multistatus") xmlWriter.WriteAttributeString("xmlns:b", "urn:uuid:c2f41010-65b3 getItemResponseMessage As ItemInfoResponseMessageType = TryCast(getItemResponse.ResponseMessages.Items(0), ItemInfoResponseMessageType) xmlWriter.WriteStartElement("a:response") xmlWriter.WriteElementString("a:href", "") xmlWriter.WriteStartElement("a:propstat") xmlWriter.WriteStartElement("a:prop") xmlWriter.WriteElementString("a:displayname", it.Subject) xmlWriter.WriteElementString d:date", it.DateTimeReceived.ToLocalTime()) xmlWriter.WriteElementString("d:from", DirectCast(getItemResponseMessage.Items.Items(0), MessageType
System.Net.WebClient webClient = new System.Net.WebClient(); System.Net.NetworkCredential networkCredential = new System.Net.NetworkCredential("username", "password"); webClient.Credentials = networkCredential; webClient.UploadFile("ftp: / / michaelrparker.biz / PerlFiles / " + fi.Name.ToString(), fi
code is not working adding style in xml xmlWriter.WriteStartElement("Style id = normalPlacemark"); / / start of style xmlWriter.WriteStartElement("IconStyle"); / / icon style xmlWriter.WriteStartElement("Icon"); / / icon xmlWriter.WriteStartElement("href"); / / href xmlWriter.WriteString("http: / / ndem-server / mobile / images / ndem_emr
not pointing the location xmlWriter.WriteStartDocument(true); / / Write KML xmlWriter.WriteStartElement("kml", "http: / / www.opengis.net / kml / 2.2"); xmlWriter.WriteStartElement("Folder"); xmlWriter.WriteStartElement("Name"); xmlWriter.WriteString("REHU); xmlWriter.WriteEndElement(); / / end of name xmlWriter WriteStartElement("description"); xmlWriter.WriteString(district); xmlWriter.WriteString(disaster); xmlWriter.WriteEndElement(); / / end of desription xmlWriter.WriteStartElement("GroundOverlay"); xmlWriter.WriteStartElement("Name"); xmlWriter.WriteString(repofficer); xmlWriter.WriteString(timeofrep); xmlWriter.WriteEndElement(); / / end of name of ground overlay xmlWriter.WriteStartElement("description"); xmlWriter.WriteString(timeofoccu); xmlWriter.WriteString(dateofocur); xmlWriter.WriteEndElement(); / / end of description of groud overlay xmlWriter.WriteStartElement("Icon"); xmlWriter.WriteStartElement("href"); xmlWriter.WriteString("http: / / code.google.com / apis / kml / documentation etna.jpg"); xmlWriter.WriteEndElement(); / / end of href xmlWriter.WriteEndElement(); xmlWriter.WriteStartElement("LatLonBox"); Double latitude = Convert.ToDouble(lat); Double longi = Convert.ToDouble
HttpWebRequest)WebRequest.Create(URL); / / Create proxy credentials ICredentials credential = new NetworkCredential(uid, password, domain); / / Create proxy server. byPassListArray is a string proxy, true, byPassListArray, credential); request.Proxy = proxyServer; request.Credentials = new NetworkCredential(Uid, Password); example code snippet: string query = " http: / / www.feedster 100"; WebProxy proxyObj = new WebProxy("10.10.249.19", 8080) ; NetworkCredential networkCredential = new NetworkCredential("yourname", "yourpass") ; HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(query) ; proxyObj.Credentials = networkCredential ; req.Proxy = proxyObj ; / / this request uses the default credential set or we can create unique new credentials: / / request.Credentials = new NetworkCredential(Uid, Password); XmlDocument doc = new XmlDocument(); System.Net.HttpWebResponse resp
NetworkCredential to Serializable for StateServer I am useing StateServer for session but problem is I canot save NetWorkCredential object into session. how I set that object into serializable object then I have same problem. The type System.Net.NetworkCredential in Assembly System, Version = 1.0.5000.0, Culture = neutral New BinaryFormatter b.Serialize(sw, SessionObject) Session(SessionName) = sw.ToArray NetworkCredential is not serializable, therefore the StateServer serialization framework is unable format that can be stored and deserialized back into a NetworkCredential object when you request it back out. Therefore, the simple as stated, is to store the important PROPERTIES of the NetworkCredential object (userName, Password, Domain, etc) and when you need them back out, create a new instance of the NetworkCredential class and assign the retrieved property values back to it
100"; WebProxy proxyObj = new WebProxy("10.10.249.19", 8080) ; NetworkCredential networkCredential = new NetworkCredential("yourname", "yourpass") ; HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(query) ; proxyObj.Credentials = networkCredential ; req.Proxy = proxyObj ; / / this request uses the default credential set or we can create unique new credentials: / / request.Credentials = new NetworkCredential(Uid, Password); Would appriciate your earliest reply since I tried
i have created xml as shown in d below xmlTw.WriteStartElement("Database"); xmlTw.WriteStartElement("TableName"); xmlTw.WriteAttributeString("name", tableListReader.Value); xmlTw.WriteAttributeString("nsForWebPages", Session