使用Microsoft Exchange WebServices从Outlook中检索联系人

本文关键字:检索 联系人 Outlook Microsoft Exchange WebServices 使用 | 更新日期: 2023-09-27 18:15:31

我使用Microsoft Exchange Services从Outlook检索联系人。我使用下面的代码。它执行时没有任何错误。但是,我在联系人中什么也没有。

public ActionResult Index()
    {
        ExchangeService _service = new ExchangeService(ExchangeVersion.Exchange2010_SP1);
        _service.Credentials = new WebCredentials("username", "password");
        _service.AutodiscoverUrl("****");
        _service.Url = new Uri("https://***/EWS/Exchange.asmx");
        foreach (Contact contact in _service.FindItems(WellKnownFolderName.Contacts, new ItemView(int.MaxValue)))
        {
            // do something 
        }
        return View();
    }

如何获取联系人?

请帮忙,谢谢。

使用Microsoft Exchange WebServices从Outlook中检索联系人

我建议你清理你的代码,因为有几个原因我可以看到它失败eg

    _service.AutodiscoverUrl("****");
    _service.Url = new Uri("https://***/EWS/Exchange.asmx");

使用一个或另一个,对于AutoDiscoverURL,你可能需要一个回调在这里

    foreach (Contact contact in _service.FindItems(WellKnownFolderName.Contacts, new ItemView(int.MaxValue)))

首先,一个联系人文件夹可以包含联系人以外的对象,所以如果你的代码遇到一个分布列表,它会产生一个异常。同样使用int。MaxValue是一个坏主意,你应该以1000为一组来分页条目(Exchange 2010上的Throttling将为你强制执行这一点,所以如果有超过1000个,你的代码将无法获得所有的联系人)。此外,您尝试访问的邮箱是否属于您使用的安全凭据。我建议您使用

之类的字符
        String mailboxToAccess = "user@domain.onmicrosoft.com";
        ExchangeService _service = new ExchangeService(ExchangeVersion.Exchange2010_SP1);
        _service.Credentials = new WebCredentials("upn@domain.onmicrosoft.com", "password");
        _service.AutodiscoverUrl(mailboxToAccess, redirect => true);
       // _service.Url = new Uri("https://***/EWS/Exchange.asmx");
        ItemView iv = new ItemView(1000);
        FolderId ContactsFolderId = new FolderId(WellKnownFolderName.Contacts,mailboxToAccess);
        FindItemsResults<Item> fiResults;
        do
        {
            fiResults = _service.FindItems(ContactsFolderId, iv);
            foreach (Item itItem in fiResults.Items)
            {
                if (itItem is Contact)
                {
                    Contact ContactItem = (Contact)itItem;
                    Console.WriteLine(ContactItem.Subject);
                }
            }
            iv.Offset += fiResults.Items.Count;
        } while (fiResults.MoreAvailable);

您可以使用EWSEditor http://ewseditor.codeplex.com/测试EWS本身。