Microsoft.Exchange.WebServices.Data.ServiceResponseException:无法访问为具有完全权限的用户抛出的帐户或邮箱

Posted

技术标签:

【中文标题】Microsoft.Exchange.WebServices.Data.ServiceResponseException:无法访问为具有完全权限的用户抛出的帐户或邮箱【英文标题】:Microsoft.Exchange.WebServices.Data.ServiceResponseException: Unable to access an account or mailbox thrown for user having fullright access 【发布时间】:2015-10-06 06:23:35 【问题描述】:

我有两个用户 a@company.comb@company.com 。我正在尝试使用 EWS Managed API用户 a 访问 b 的邮箱。用户 a 对 b 的邮箱具有完全权限。我什至可以通过 Outlook Web Access 从 a 的帐户打开 b 的邮箱。

但是当尝试访问 b 的邮箱时,我得到了这个异常。

Microsoft.Exchange.WebServices.Data.ServiceResponseException:无法 访问帐户或邮箱。

这里是相关代码

            var mailbox = new Mailbox("b@company.com");
            var folderId = new FolderId(WellKnownFolderName.Inbox, mailbox);
            Folder lyncFolder;
            try
            
                // Getting  ServiceResponseException : Unable to access an account or mailbox                              
                lyncFolder = Folder.Bind(_exchangeService, folderId);
            
            catch (ServiceResponseException ex)
            
                _logger.Error(ex);

                    throw;

            

这是请求跟踪

<Trace Tag=\"EwsRequest\" Tid=\"7\" Time=\"2015-10-07 11:04:47Z\" Version=\"15.00.0847.030\">
  <?xml version=\"1.0\" encoding=\"utf-8\"?>
  <soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:m=\"http://schemas.microsoft.com/exchange/services/2006/messages\" xmlns:t=\"http://schemas.microsoft.com/exchange/services/2006/types\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">
    <soap:Header>
      <t:RequestServerVersion Version=\"Exchange2013_SP1\" />
    </soap:Header>
    <soap:Body>
      <m:GetFolder>
        <m:FolderShape>
          <t:BaseShape>AllProperties</t:BaseShape>
        </m:FolderShape>
        <m:FolderIds>
          <t:DistinguishedFolderId Id=\"inbox\">
            <t:Mailbox>
              <t:EmailAddress>b@company.com</t:EmailAddress>
            </t:Mailbox>
          </t:DistinguishedFolderId>
        </m:FolderIds>
      </m:GetFolder>
    </soap:Body>
  </soap:Envelope>
</Trace>

这是响应跟踪

<Trace Tag="EwsResponse" Tid="7" Time="2015-10-07 04:19:05Z" Version="15.00.0847.030">
  <?xml version="1.0" encoding="utf-8"?>
  <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Body>
      <s:Fault>
      <faultcode xmlns:a="http://schemas.microsoft.com/exchange/services/2006/types">a:ErrorMailboxConfiguration</faultcode>
      <faultstring xml:lang="en-US">Unable to access an account or mailbox.</faultstring>
      <detail>
        <e:ResponseCode xmlns:e="http://schemas.microsoft.com/exchange/services/2006/errors">ErrorMailboxConfiguration</e:ResponseCode>
        <e:Message xmlns:e="http://schemas.microsoft.com/exchange/services/2006/errors">Unable to access an account or mailbox.</e:Message>
      </detail>
      </s:Fault>
    </s:Body>
  </s:Envelope>
</Trace>

这里是响应头

Transfer-Encoding : chunked
request-id : 26ee43ea-6444-4f6c-abb0-f041fdb6dde6
X-CalculatedBETarget : BLUPR01MB116.prod.exchangelabs.com
X-BackEndHttpStatus : 500
x-EwsHandler : GetFolder
X-DiagInfo : BLUPR01MB116
X-BEServer : BLUPR01MB116
X-FEServer : SIXPR04CA0091
Cache-Control : private
Content-Type : text/xml; charset=utf-8
Date : Wed, 07 Oct 2015 10:54:15 GMT
Set-Cookie : exchangecookie=e6f7d9dad36b40ad918050eefbd3d25c; path=/
Server : Microsoft-IIS/8.0
X-AspNet-Version : 4.0.30319
X-Powered-By : ASP.NET

我观察到的行为是,当我从 OWA 的 a 帐户手动打开 b 的邮箱时,异常消失了,我可以从代码中访问 b 的邮箱。再后来,当我不得不再次手动从 OWA 的 a 帐户打开 b 的邮箱并且循环继续时,同样的异常再次随机出现。 有什么想法吗?

【问题讨论】:

【参考方案1】:

好的。如果您有配置问题,可能会出现该错误,可能不止一个用户具有相同的 SMTP 地址。例如,如果您不止一次使用将b@company.com 列为 SMTP 地址,您可能会看到此错误。

【讨论】:

我要到明天才能验证这一点。但是我还有许多其他 smtp 地址 c@company.com、d@company.com 等等.....对于所有这些地址,我在尝试从 a@company.com 访问时遇到了同样的错误。那么具有相同smtp的多个用户可能会导致所有其他用户失败?【参考方案2】:

这可能与 Impersonation 有关,请尝试将此行放入您的代码中:

service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, b@company.com);

用户可以通过三种方式访问​​其他用户的邮箱:

    通过添加委托并为每个委托指定权限。 直接修改文件夹权限。 通过使用模拟。

每种方式都有其局限性,您可以从该链接中找到详细信息。

【讨论】:

我采用的是委托方式,并且没有为用户启用 ApplicationImpersonation。委托方法适用于许多其他帐户(不同的域,例如 a@anothercompany.com 和 b@anothercompany.com)。我只有一个域面临这个问题。

以上是关于Microsoft.Exchange.WebServices.Data.ServiceResponseException:无法访问为具有完全权限的用户抛出的帐户或邮箱的主要内容,如果未能解决你的问题,请参考以下文章