Synchronizing Mailboxes in Exchange 2010

Last modified: May 21, 2009

Applies to: Exchange Server 2007 | Exchange Server 2010

You can use Exchange Web Services to synchronize items between a computer that is running Microsoft Exchange Server 2010 and the client.

Example

This example shows you how to use the SyncFolderItems Operation to synchronize items.

static void SyncItems(string syncState, ExchangeServiceBinding esb)
{
    // Create the synchronize items request.
    SyncFolderItemsType syncItemsRequest = new SyncFolderItemsType();
    
    // Specify the properties to synchronize.
    syncItemsRequest.ItemShape = new ItemResponseShapeType();
    syncItemsRequest.ItemShape.BaseShape = DefaultShapeNamesType.Default;

    // Specify the folder to synchronize.
    syncItemsRequest.SyncFolderId = new TargetFolderIdType();
    DistinguishedFolderIdType drafts = new DistinguishedFolderIdType();
    drafts.Id = DistinguishedFolderIdNameType.drafts;
    syncItemsRequest.SyncFolderId.Item = drafts;

    // Specify the synchronization state if this is not the first attempt to
    // synchronize the client and the Exchange server.
    if (syncState.Length != 0)
    {
        syncItemsRequest.SyncState = syncState;
    }

    // Specify the number of items to return.
    syncItemsRequest.MaxChangesReturned = 20;

    try
    {
        // Send the request and get the response.
        SyncFolderItemsResponseType syncItemsResponse = esb.SyncFolderItems(syncItemsRequest);

        SyncFolderItemsResponseMessageType responseMessage = new SyncFolderItemsResponseMessageType();
        responseMessage = syncItemsResponse.ResponseMessages.Items[0] as SyncFolderItemsResponseMessageType;

        // Determine whether the request was a success.
        if (responseMessage.ResponseClass == ResponseClassType.Error)
        {
            throw new Exception(responseMessage.MessageText);
        }
        else
        {
            string changes = responseMessage.Changes.Items.Length.ToString();
            Console.WriteLine("Number of items to synchronize: " + changes);
        }
    }
    
    catch (Exception e)
    {
        Console.WriteLine(e.Message);
    }
}
<?xml version="1.0" encoding="utf-8" ?>
<SyncFolderItems xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                     xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <ItemShape xmlns="https://schemas.microsoft.com/exchange/services/2006/messages">
    <BaseShape xmlns="https://schemas.microsoft.com/exchange/services/2006/types">Default</BaseShape>
  </ItemShape>
  <SyncFolderId xmlns="https://schemas.microsoft.com/exchange/services/2006/messages">
    <DistinguishedFolderId Id="drafts" xmlns="https://schemas.microsoft.com/exchange/services/2006/types" />
  </SyncFolderId>
  <MaxChangesReturned xmlns="https://schemas.microsoft.com/exchange/services/2006/messages">20</MaxChangesReturned>
</SyncFolderItems>
<?xml version="1.0" encoding="utf-8" ?>
<SyncFolderItemsResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
                             xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <ResponseMessages xmlns="https://schemas.microsoft.com/exchange/services/2006/messages">
    <SyncFolderItemsResponseMessage ResponseClass="Success">
      <ResponseCode>NoError</ResponseCode>
      <SyncState>H4sIAAAA=</SyncState>
      <IncludesLastItemInRange>true</IncludesLastItemInRange>
      <Changes>
        <Create xmlns="https://schemas.microsoft.com/exchange/services/2006/types">
          <Message>
            <ItemId Id="AAAlAFVzA" ChangeKey="CQAAfYAD" />
            <Subject>Test</Subject>
            <Sensitivity>Normal</Sensitivity>
            <Size>879</Size>
            <DateTimeSent>2006-10-27T23:20:39Z</DateTimeSent>
            <DateTimeCreated>2006-10-27T23:39:03Z</DateTimeCreated>
            <HasAttachments>false</HasAttachments>
            <From>
              <Mailbox>
                <Name>User1</Name>
                <EmailAddress>User1@example.com</EmailAddress>
                <RoutingType>SMTP</RoutingType>
              </Mailbox>
            </From>
            <IsRead>true</IsRead>
          </Message>
        </Create>
        <Create xmlns="https://schemas.microsoft.com/exchange/services/2006/types">
          <Message>
            <ItemId Id="AAAlAFVz" ChangeKey="CQAY+Z" />
            <Subject>Project Action</Subject>
            <Sensitivity>Normal</Sensitivity>
            <Size>484</Size>
            <DateTimeSent>2006-11-02T23:49:31Z</DateTimeSent>
            <DateTimeCreated>2006-11-02T23:49:31Z</DateTimeCreated>
            <HasAttachments>false</HasAttachments>
            <From>
              <Mailbox>
                <Name>User1</Name>
                <EmailAddress>User1@example.com</EmailAddress>
                <RoutingType>SMTP</RoutingType>
              </Mailbox>
            </From>
            <IsRead>true</IsRead>
          </Message>
        </Create>
      </Changes>
    </SyncFolderItemsResponseMessage>
  </ResponseMessages>
</SyncFolderItemsResponse>

The SyncState and item identifiers have been shortened to preserve readability.