我正在使用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();
}
我如何获得联系人?
请帮忙, 感谢。
答案 0 :(得分:2)
我建议你清理你的代码,因为有一些原因我可以看到它失败,例如
_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上的限制将为你强制执行此操作,因此如果超过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本身。