C#: Getting All Emails From Exchange using Exchange Web Services

Email_OpsThis article demonstrates how to use Exchange Webservices (EWS), as found on Exchange 2007 SP1 and going forward, to extract email body, headers and other email related items without using or needed Outlook installed. Note this assumes you are using Visual Studio 2008 and C#.


  1. Download and install the EWS assemblies from Exchange Web Services Managed API and install the target version either 32 or 64. Please remember to note the directory which it gets installed to for it is needed later. Of note is that the install directory contains an excellent document Getting Started which has examples that show the capabilities of the web services.
  2. Create your project in Studio, the below example C# code targets a Console Application.
  3. Add a reference to Microsoft.Exchange.WebServices by browsing to the directory loaded in step 1 and selecting the  Microsoft.Exchange.WebServices.dll. Remember to add using Microsoft.Exchange.WebServices.Data; in your code.
  4. Add these lines of code to initialize the web service:
    ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
    //service.Credentials = new NetworkCredential( "{Active Directory ID}", "{Password}", "{Domain Name}" );
    service.AutodiscoverUrl( "First.Last@MyCompany.com" );


    • Line 1 : Create an Exchange Web Service instance specifying that we are targeting a specific version of Exchange.
    • Line 3 :   You may need to have a service account do your dirty work and this line uncommented out is your key to doing that.
    • Line 5 : We don’t specify an Exchange server, but auto discover it. The server may be clustered and this will get the best one for the job. We also specify the account’s mailbox to use.
  5. Once the service is up and running we can now get the emails found in the box. Here is how we do it:
    FindItemsResults<Item> findResults = service.FindItems(
       new ItemView( 10 ) );
    foreach ( Item item in findResults.Items )
       Console.WriteLine( item.Subject );


    • Line 1 :  We call the service to find out about the mailbox.
    • Line 2 :  We are interested in the inbox only, but we could be interested in the calendar. This is where to specify those items.
    • Line 3 :  We only want 10 items…change that number for different results
    • Line 5:  Print out the items, we are only going to show the subject but there are other header items we could show.
  6. Run the program. If everything goes alright then we have gotten the top ten items of the mailbox.

That should get you started. Again check the Getting Started document which the install dropped into the install folder for more examples!



  1. Poor_beggar says:


    I’m working on a webapplication that visualizes the mails from a given exchange mailbox. Everything works fine until there.
    Now when they select a line I want to open the details of the mail (see sampling of Outlook)
    The problem is that when I use the ID or unique ID of the Item, they seem to change every time.

    How do I retreive only the selected Mail?

    I don’t want to use a wildCard and use the receiveddate or something. I would like to use a unique identifier known bij Exchange and is everytime the same.



  2. Peter says:

    Thanks for the great tutorial – quick, simple and helped me get EWS up and going easily!

  3. A. Levine says:

    Worked great for me, but then company switched to office 365 and it broke. Any hints? Am I out of luck and need to use something else? I am just trying to develop a simple APP that iterates through emails/folders.

    Thanks in advance.


  4. A. Levine says:

    Sorry I should have been more specific than it just broke. An exception is thrown on:

  5. sam says:

    Download and install the EWS assemblies isn’t working. how can i get the EWS assemblies .


Leave a Reply