2

我们使用 office JavaScript api 开发 Outlook 加载项,并且需要更新邮件的类别。

尝试使用加载项令牌通过 Exchange EWS 调用 UpdateItem - 失败并显示 500。

请参阅请求和响应: http: //pastebin.com/55x2d2Ht

  1. 应用的清单权限是 ReadWriteMailbox(最高)
  2. 在 OWA /manageapps 中选择应用程序时 - 它显示“单击此添加时,它将能够:阅读、创建和更新邮箱中的电子邮件”
  3. 尝试了来自mailbox.getCallbackTokenAsync 的令牌和使用makeEwsRequestAsync。
  4. EWS GetItem 和 CreateItem 操作成功 - 只有 UpdateItem 失败
  5. 对 UpdateItem 的响应:500 此调用者或应用程序无法使用请求的 Web 方法。
  6. 它是 500(而不是 403)的事实可能意味着 UpdateItem 操作完全被插件应用程序阻止
  7. jwt 令牌(来自 getCallbackTokenAsync)没有“scp”键
  8. 如果使用另一个令牌发送相同的 UpdateItem XML Soap 数据包,则从在 Azure 中注册的测试 OAuth 应用程序具有对 Exchange 的读/写权限 --> 它会成功。此应用 jwt 令牌带有“scp”:“full_access_as_user Mail.Read Mail.ReadWrite Mail.Send”
  9. 尝试使用加载项令牌与另一个交换用户 - 也失败了。
  10. Office AddIn 文档声明在插件上下文中支持 EWS UpdateItem 操作。请参阅Office 开发中心
  11. 摘要:只有带有 Addin OAuth 令牌的 Ews UpdateItem 失败。其他操作成功并且使用其他令牌(或基本身份验证)发布 UpdateItem 也成功。
4

1 回答 1

2

您应该能够将 UpdateItem 与makeEwsRequestAsync. 您不能使用getCallbackTokenAsync,因为此调用返回一个只读标记,只能用于GetItemand GetAttachment。使用 发出请求时makeEwsRequestAsync,您的 XML SOAP 请求(中的数据参数makeEwsRequest应如下所示:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               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:Body>
    <UpdateItem MessageDisposition="SaveOnly" ConflictResolution="AutoResolve" xmlns="http://schemas.microsoft.com/exchange/services/2006/messages">
      <ItemChanges>
        <t:ItemChange>
          <t:ItemId Id = "AAMkAGI3NDEzZjRhLWU3ZjktNGViNy04MTI1LWFhOWRiZDRlY2QwNABGAAAAAADBaXFYA4KPQqsQBpmZF2+2BwAa6KJzOcvaRKcc5UfLbF5tAAAA4fK1AAACk4HLLuxASqDPNieBkIv8AANIKlICAAA=" ChangeKey="CQAAABYAAAACk4HLLuxASqDPNieBkIv8AANIb3mG"/>
          <t:Updates>
            <t:SetItemField>
              <t:FieldURI FieldURI = "item:Categories" />
              <t:Message>
                <t:Categories>
                  <t:String>Workout</t:String>
                </t:Categories>
              </t:Message>
            </t:SetItemField>
          </t:Updates>
        </t:ItemChange>
      </ItemChanges>
    </UpdateItem>
  </soap:Body>
</soap:Envelope>

您无需传入回调令牌即可调用makeEwsRequestAsync

于 2016-11-29T23:05:50.093 回答