当 Outlook Web 加载项通过 makeEwsRequestAsync api 发出 GetItem 请求时,接收“ErrorAccessDenied”响应代码

2024-02-18

我们正在使用 Exchange Server 和 Outlook 客户端版本的不同组合来测试 Outlook Web 加载项。

该插件使GetItem请求通过makeEwsRequestAsync https://dev.office.com/reference/add-ins/outlook/1.5/Office.context.mailbox#makeewsrequestasyncdata-callback-usercontext API:

<?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:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
    xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
    <soap:Header>
        <RequestServerVersion Version="Exchange2013" 
            xmlns="http://schemas.microsoft.com/exchange/services/2006/types" soap:mustUnderstand="0" />
    </soap:Header>
    <soap:Body>
        <GetItem 
            xmlns="http://schemas.microsoft.com/exchange/services/2006/messages">
            <ItemShape>
                <t:BaseShape>IdOnly</t:BaseShape>
                <t:IncludeMimeContent>true</t:IncludeMimeContent>
            </ItemShape>
            <ItemIds>
                <t:ItemId Id="AAMkAGMwMDQxMDZhLTc5ODgtNDY5Yi1iYzk1LThlZDMyYjNiOTI3MgBGAAAAAACAJypvrerqS79u4AuHwVA6BwDco3spzUIpR7WutkjxuhkZAAAAAAEMAADco3spzUIpR7WutkjxuhkZAAA3RsNcAAA="/>
            </ItemIds>
        </GetItem>
    </soap:Body>
</soap:Envelope>

当我们使用 Exchange Server 2016 和 Outlook for Windows 2013 进行测试时,GetItem操作失败并出现以下响应:

<s:Envelope 
    xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Header>
        <h:ServerVersionInfo MajorVersion="15" MinorVersion="1" MajorBuildNumber="225" MinorBuildNumber="41" Version="V2_48" 
            xmlns:h="http://schemas.microsoft.com/exchange/services/2006/types" 
            xmlns="http://schemas.microsoft.com/exchange/services/2006/types" 
            xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
    </s:Header>
    <s:Body 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <m:GetItemResponse 
            xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" 
            xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
            <m:ResponseMessages>
                <m:GetItemResponseMessage ResponseClass="Error">
                    <m:MessageText>Access is denied. Check credentials and try again.</m:MessageText>
                    <m:ResponseCode>ErrorAccessDenied</m:ResponseCode>
                    <m:DescriptiveLinkKey>0</m:DescriptiveLinkKey>
                    <m:Items/>
                </m:GetItemResponseMessage>
            </m:ResponseMessages>
        </m:GetItemResponse>
    </s:Body>
</s:Envelope> 

对于同一帐户,如果我们尝试从 Outlook 2016 for Windows 或 Outlook Web App 进行尝试,则该加载项可以正常工作。

我怎样才能进一步调试这个?有任何已知的限制吗?能否请你帮忙。

分帧请求的JS代码:

function addSoapEnvelope(body) {

var request =
    '<?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:xsd="http://www.w3.org/2001/XMLSchema"' +
    '               xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"' +
    '               xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">' +
    '  <soap:Header>' +
    '    <RequestServerVersion Version="Exchange2013" xmlns="http://schemas.microsoft.com/exchange/services/2006/types" soap:mustUnderstand="0" />' +
    '  </soap:Header>' +
    '  <soap:Body>' + body + '</soap:Body>' +
    ' </soap:Envelope>';

return request;

}

function getItemRequest(id) {
var body = 
    '<GetItem xmlns="http://schemas.microsoft.com/exchange/services/2006/messages">' +     
    '      <ItemShape>  <t:BaseShape>IdOnly</t:BaseShape>  <t:IncludeMimeContent>true</t:IncludeMimeContent>  </ItemShape>' +
    '      <ItemIds><t:ItemId Id="' + id + '"/></ItemIds>' +
    '</GetItem>';
return addSoapEnvelope(body);

}

var request = getItemRequest(itemid);

Office.context.mailbox.makeEwsRequestAsync(请求, getMessageCallBack, requestContext);

来自交换服务器的 EWS 日志

2017-08-17T13:07:30.548Z,32e3b547-77aa-451c-9981-fbccecec0769,15,0,847,30,承载,真实,[电子邮件受保护] /cdn-cgi/l/email-protection,qa.sample.com,Microsoft Office/15.0(Windows NT 10.0;Microsoft Outlook 15.0.4805;

Office 扩展无权访问除用户上下文中提供的邮箱之外的任何其他邮箱。在 Microsoft.Exchange.Services.Core.Types.StoreSessionCacheBase.ConnectOnce(ExchangePrincipalmailboxToAccess CallContext callContext Boolean UnifiedLogon) 在 Microsoft.Exchange.Services.Core.Types.StoreSessionCacheBase.CreateMailboxSessionBasedOnAccessType(ExchangePrincipalmailboxToAccess CallContext callContext Boolean UnifiedLogon) 在 Microsoft.Exchange.Services .Core.Types.AppWideStoreSessionCache.GetCachedMailboxSessionByGuid(GuidmailboxGuidCallContextcallContextBooleanunifiedLogon)在Microsoft.Exchange.Services.Core.Types.MethodWideStoreSessionCache.GetCachedStoreSessionByMailboxGuid(GuidmailboxGuidBooleanunifiedLogon)在Microsoft.Exchange.Services.Core.Types.MethodWideStoreSessionCache.GetCachedMailboxSession (MailboxId mailId Boolean UnifiedLogon) at Microsoft.Exchange.Services.Core.Types.IdConverter.ConvertId(CallContext callContext IdHeaderInformation headerInformation ConvertOption ConvertOption BasicTypes ExpectedType List1 attachmentIds String changeKey Int32 hashCode Boolean unifiedLogon Item& cachedItem) at Microsoft.Exchange.Services.Core.Types.IdConverter.ConvertItemIdToIdAndSession(BaseItemId baseItemId ConvertOption convertOption BasicTypes expectedType Item& cachedItem) at Microsoft.Exchange.Services.Core.GetItem.<>c__DisplayClass1.<Execute>b__0() at Microsoft.Exchange.Common.IL.ILUtil.DoTryFilterCatch(TryDelegate tryDelegate FilterDelegate filterDelegate CatchDelegate catchDelegate) at Microsoft.Exchange.Services.Core.GetItem.Execute() at Microsoft.Exchange.Services.Core.ExceptionHandler1.执行(CreateServiceResult createServiceResult Int32索引GenerateMessageXmlForServiceErrorgenerateErrorXml);


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当 Outlook Web 加载项通过 makeEwsRequestAsync api 发出 GetItem 请求时,接收“ErrorAccessDenied”响应代码 的相关文章

随机推荐