2013-09-30 65 views
3

我试图使用EWS访问收件箱邮件。 Kerberos已配置。但是,当我在我的webpart中使用service.UseDefaultCredentials = true时,出现401错误(未授权)。什么是解决这个问题的解决方案。Sharepoint 2013 EWS收件箱webpart错误401未经授权

private static bool ValidateCertificate(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors policyErrors) { 
     return true; 
    } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     try 
     {    

      ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2); 

      ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateCertificate); 

      service.UseDefaultCredentials = true; 

      service.Url = new Uri(EWSuri.uri); 


      SearchFilter sf = new SearchFilter.SearchFilterCollection(LogicalOperator.And, 
                     new SearchFilter.IsEqualTo(
                     EmailMessageSchema.IsRead, false), new SearchFilter.IsGreaterThan(ItemSchema.DateTimeReceived, DateTime.Now.AddDays(-14))); 

      FindItemsResults<Item> findResults = service.FindItems(
       WellKnownFolderName.Inbox, sf, 
       new ItemView(int.MaxValue)); 

      emailblock.InnerHtml = "<div data-itemscount=\"" + findResults.Items.Count + "\"></div>"; 

      foreach (Item item in findResults.Items) 
      { 
       EmailMessage mes = (EmailMessage)item; 

       emailblock.InnerHtml += "<div class=\"emailitem\"><p class=\"emailline clearfix\"><span class=\"emailfield\">From:</span>" + 
          "<span class=\"emailtext\">" + " " + mes.Sender.Name + "</span></p>" + 
          "<p class=\"emailline clearfix\"><span class=\"emailfield\">Subject:</span>" + 
          "<span class=\"emailtext\">" + " " + item.Subject + "</span></p>" + 
          "<p class=\"emailline clearfix\"><span class=\"emailfield\">Received:</span>" + 
          "<span class=\"emailtext\">" + " " + item.DateTimeSent + "</span></p></div>"; 

      } 
     } 

     catch (Microsoft.Exchange.WebServices.Autodiscover.AutodiscoverRemoteException ex) 
     { 
      Console.WriteLine("Exception thrown:{0}" ,ex.Message); 
     } 

    } 

回答

0

尝试给予另一个有权限的登录或凭证。如果您在AD环境中,请不要忘记指定域名:

exchangeService = new ExchangeService(ExchangeVersion.Exchange2010_SP1); 
exchangeService.Credentials = new NetworkCredential(ExchangeConfig.user, 
                  ExchangeConfig.password, 
                  ExchangeConfig.domain); 
exchangeService.AutodiscoverUrl(ExchangeConfig.usermail); 
+0

我想为我的SharePoint站点中的每个用户使用默认凭据。如果我更改我的控制台应用程序的代码,一切都会正常工作。我不明白我该如何解决这个问题。 Kerberos已配置,但它为什么不起作用? – Dmitry

0

service.UseDefaultCredentials = true;将在您使用模拟器登录自己的机器时起作用,这不起作用。要解决这个问题,你需要获得一个管理员用户谁拥有超过所有邮件帐户的读权限,然后通过管理员用户的显式凭证,然后使用EWS的impersonate类和你的问题将得到解决

相关问题