Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I retrieve global contacts with Exchange Web Services (EWS)?

I am using EWS and wish to obtain the global address list from exchange for the company. I know how to retrieve the personal contact list.

All the samples in the API documentation deal with updating user information but not specifically how to retrieve them.

I've even tried the following to list the folders but it doesn't yeild the correct results.

private static void ListFolder(ExchangeService svc, FolderId parent, int depth) {
    string s;
    foreach (var v in svc.FindFolders(parent, new FolderView(int.MaxValue))) {
        Folder f = v as Folder;
        if (f != null) {
            s = String.Format("[{0}]", f.DisplayName);
            Console.WriteLine(s.PadLeft(s.Length + (depth * 2)));
            ListFolder(svc, f.Id, depth + 1);

            try {
                foreach (Item i in f.FindItems(new ItemView(20))) {
                    Console.WriteLine(
                        i.Subject.PadLeft(i.Subject.Length + ((depth + 1) * 2)));
                }
            } catch (Exception) {
            }
        }
    }
}

While the question has already been raised (How to get contact list from Exchange Server?) this question deals specifically with using EWS to get the global address list while this question asks for advice on a general level.

like image 343
Brett Ryan Avatar asked Nov 05 '22 16:11

Brett Ryan


1 Answers

you may got ItemType objects in a specifiedfolder with the code snippet below and then cast ItemType objects to ContactItemType (for contact objects) ....

/// <summary>
    /// gets list of ItemType objects with maxreturncriteria specicification
    /// </summary>
    /// <param name="esb">ExchangeServiceBinding object</param>
    /// <param name="folder">FolderIdType to get items inside</param>
    /// <param name="maxEntriesReturned">the max count of items to return</param>
    public static List<ItemType> FindItems(ExchangeServiceBinding esb, FolderIdType folder, int maxEntriesReturned)
    {
        List<ItemType> returnItems = new List<ItemType>();
        // Form the FindItem request 
        FindItemType request = new FindItemType();
        request.Traversal = ItemQueryTraversalType.Shallow;
        request.ItemShape = new ItemResponseShapeType();
        request.ItemShape.BaseShape = DefaultShapeNamesType.AllProperties;
        request.ParentFolderIds = new FolderIdType[] { folder };
        IndexedPageViewType indexedPageView = new IndexedPageViewType();
        indexedPageView.BasePoint = IndexBasePointType.Beginning;
        indexedPageView.Offset = 0;
        indexedPageView.MaxEntriesReturned = 100;
        indexedPageView.MaxEntriesReturnedSpecified = true;
        request.Item = indexedPageView;
        FindItemResponseType response = esb.FindItem(request);
        foreach (FindItemResponseMessageType firmtMessage in response.ResponseMessages.Items)
        {
            if (firmtMessage.ResponseClass == ResponseClassType.Success)
            {
                if (firmtMessage.RootFolder.TotalItemsInView > 0)
                    foreach (ItemType item in ((ArrayOfRealItemsType)firmtMessage.RootFolder.Item).Items)
                        returnItems.Add(item);
                        //Console.WriteLine(item.GetType().Name + ": " + item.Subject + ", " + item.DateTimeReceived.Date.ToString("dd/MM/yyyy"));
            }
            else
            {
             //handle error log  here
            }
        }
        return returnItems;
    }
like image 54
dankyy1 Avatar answered Dec 15 '22 08:12

dankyy1