How can I update all contact fields in exchange server public folder RRS feed

  • Question

  • I'm looking for a sample .NET code to update the contacts in the public folder under Exchange 2010 so far i was able to update some fields like the e-mail, but not the Business, Home & Other Addresses. Please note that i'm getting the contacts info from a custom Sharepoint List. This is my code:

    static void UpdateContact(ExchangeServiceBinding esb)
        // Create an object of update item type.
        UpdateItemType updateItemType = new UpdateItemType();
        updateItemType.ConflictResolution = ConflictResolutionType.AlwaysOverwrite;
        updateItemType.ItemChanges = new ItemChangeType[1];
        ItemChangeType changeType = new ItemChangeType();
        // Get the ID and change key from the contact item that you btained by using FindItem or CreateItem.
        ItemIdType contactId = new ItemIdType();
        contactId.Id = "AAAt=";
        contactId.ChangeKey = "EQAA";
        changeType.Item = contactId;
        changeType.Updates = new ItemChangeDescriptionType[1];
        // Create a set item field to identify the type of update.
        SetItemFieldType setItem = new SetItemFieldType();
        PathToIndexedFieldType indexedField = new PathToIndexedFieldType();
        // Update EmailAddress1 for the contact.
        indexedField.FieldIndex = "EmailAddress1";
        indexedField.FieldURI = DictionaryURIType.contactsEmailAddress;
        setItem.Item = indexedField;
        // Create a contact item to contain the update.
        ContactItemType contact = new ContactItemType();
        contact.EmailAddresses = new EmailAddressDictionaryEntryType[1];
        // Specify the e-mail address to be modified, and specify the new e-mail address.
        EmailAddressDictionaryEntryType emailAddress = new EmailAddressDictionaryEntryType();
        emailAddress.Key = EmailAddressKeyType.EmailAddress1;
        emailAddress.Value = "";
        contact.EmailAddresses[0] = emailAddress;
        setItem.Item1 = contact;
        changeType.Updates[0] = setItem;
        updateItemType.ItemChanges[0] = changeType;
        // Send the update item request and receive the response.
        UpdateItemResponseType updateItemResponse = esb.UpdateItem(updateItemType);
        // Access the response.
        if (updateItemResponse.ResponseMessages.Items.Length > 0 &&
            updateItemResponse.ResponseMessages.Items[0].ResponseClass == ResponseClassType.Success)
            ItemInfoResponseMessageType responseMessage = updateItemResponse.ResponseMessages.Items[0] as ItemInfoResponseMessageType;
            ContactItemType contactResponse = responseMessage.Items.Items[0] as ContactItemType;
            Console.WriteLine("Created Contact Item with Id {0} and ChangeKey {1}", contactResponse.ItemId.Id, contactResponse.ItemId.ChangeKey);

    how can i programmatically update the business, Home & other addresses for a given contact email address.

    Regards, Jamil

    Wednesday, June 27, 2012 5:22 AM


  • I would suggest you download and use the EWS Managed api from which will save you many hours of coding. You can then you can use the code samples out of which demonstrates how to set the address and phone details.

    To do this using Proxy Code like you have you need to use a seperate SetItem for each Property you update eg

                SetItemFieldType setItem = new SetItemFieldType();
                PathToIndexedFieldType pa1indexedField = new PathToIndexedFieldType();
                pa1indexedField.FieldIndex = PhysicalAddressIndexType.Business.ToString();
                pa1indexedField.FieldURI = DictionaryURIType.contactsPhysicalAddressCity;
                PhysicalAddressDictionaryEntryType peType = new PhysicalAddressDictionaryEntryType();
                peType.City = "New York";
                ContactItemType cnContact = new ContactItemType();
                cnContact.PhysicalAddresses = new PhysicalAddressDictionaryEntryType[1];
                cnContact.PhysicalAddresses[0] = peType;
                setItem.Item = pa1indexedField;
                setItem.Item1 = cnContact;

    • Marked as answer by Jamil Hallal Tuesday, July 10, 2012 10:48 AM
    Wednesday, June 27, 2012 6:32 AM