Notice: This website is an unofficial Microsoft Knowledge Base (hereinafter KB) archive and is intended to provide a reliable access to deleted content from Microsoft KB. All KB articles are owned by Microsoft Corporation. Read full disclaimer for more details.

How to list folders or items in a user's mailbox by using the HttpWebRequest class and the HttpWebResponse class in Visual Basic .NET

View products that this article applies to.

This article was previously published under Q314196
For a Microsoft Visual C# .NET version of this article, see 313129 (


This article describes how to use the HttpWebRequest class and the HttpWebResponse class from the "System.Net" namespace to list folders or items in a user's mailbox on a computer that is running Microsoft Exchange 2000 Server by using Microsoft Visual Basic .NET.
For a Microsoft Visual C# .NET version of this article, see 313129 (

↑ Back to the top

More information

To list folders or items in a user's mailbox, follow these steps:
1.Start Microsoft Visual Studio .NET.
2.On the File menu, point to New, and then click Project.
3.In the Visual Basic Projects types list, click Console Application.

By default, the Module1.vb file is created.
4.In the code window, replace the code with the following:
Imports System.Net
Imports System.IO

Module Module1
    Sub Main()
        ' TODO: Replace with your folder URL.
        Dim sUri As String = "http://ExchServer/public/"
        Dim myUri As System.Uri = New System.Uri(sUri)
        Dim HttpWRequest As HttpWebRequest = WebRequest.Create(myUri)

        Dim sQuery As String
        sQuery = "<?xml version='1.0'?>" & _
         "<g:searchrequest xmlns:g='DAV:'>" & _
         "<g:sql>SELECT ""DAV:displayname"" " & _
         "FROM SCOPE('SHALLOW TRAVERSAL OF """ & sUri & """')"
        ' TODO: Make DAV:isfolder = true if you want to retrieve subfolders,
        ' and make DAV:isfolder = false to retrieve items.
        sQuery = sQuery & " WHERE ""DAV:isfolder"" = false" & _
         "</g:sql>" & _

        ' TODO: Replace with the appropriate user credentials.
        Dim myCred As NetworkCredential = New NetworkCredential("Domain\UserName", "Password")
        Dim MyCredentialCache As CredentialCache = New CredentialCache()
        MyCredentialCache.Add(myUri, "Basic", myCred)
        HttpWRequest.Credentials = MyCredentialCache

        'Set the headers.
        HttpWRequest.KeepAlive = False
        HttpWRequest.Headers.Set("Pragma", "no-cache")
        HttpWRequest.Headers.Set("Translate", "f")
        HttpWRequest.Headers.Set("Depth", "0")
        HttpWRequest.ContentType = "text/xml"
        HttpWRequest.ContentLength = sQuery.Length

        'Set the request timeout to 5 minutes.
        HttpWRequest.Timeout = 300000
        ' set the request method
        HttpWRequest.Method = "SEARCH"

        'Store the data in a byte array.
        Dim ByteQuery() As Byte = System.Text.Encoding.ASCII.GetBytes(sQuery)
        HttpWRequest.ContentLength = ByteQuery.Length
        Dim QueryStream As Stream = HttpWRequest.GetRequestStream()
        ' write the data to be posted to the Request Stream
        QueryStream.Write(ByteQuery, 0, ByteQuery.Length)

        ' Send the request and get the response.
        Dim HttpWResponse As HttpWebResponse = HttpWRequest.GetResponse()

        ' Get the status and the headers.
        Dim iStatCode As Integer = HttpWResponse.StatusCode
        Dim sStatus As String = iStatCode.ToString()
        Console.WriteLine("Status: {0} {1}", sStatus, HttpWResponse.StatusDescription.ToString())

        Console.WriteLine("Request Headers:")
        Console.WriteLine("Response Headers:")

        ' Get the response stream.
        Dim strm As Stream = HttpWResponse.GetResponseStream()

        ' Read the response stream.
        Dim sr As StreamReader = New StreamReader(strm)
        Dim sText As String = sr.ReadToEnd()
        Console.WriteLine("Response: {0}", sText)

        ' Close the stream.

        ' Clean up
        HttpWRequest = Nothing
        HttpWResponse = Nothing
        MyCredentialCache = Nothing
        myCred = Nothing
        strm = Nothing
        sr = Nothing
    End Sub
End Module
5.Search for the TODO text string in the code, and then modify the code for your environment.
6.Press F5 to build and to run the program.
7.Make sure that the folders or the items have been retrieved from the response stream.

↑ Back to the top

Keywords: KB314196, kbhowtomaster

↑ Back to the top

Article Info
Article ID : 314196
Revision : 1
Created on : 4/13/2004
Published on : 4/13/2004
Exists online : False
Views : 387