1

我們使用Office JavaScript API開發Outlook加載項並需要更新郵件消息的類別。當從Outlook JavaScript Api(office.js)中調用Exchange EWS時UpdateItem中的訪問被拒絕

當試圖調用的updateItem與Exchange EWS,使用外接令牌 - 它無法與500

查看請求和響應:http://pastebin.com/55x2d2Ht

  1. 的應用程序的清單權限是ReadWriteMailbox(最高)
  2. 當在OWA/manageapps中選擇應用程序時 - 它顯示「單擊此添加時,它將能夠:在您的郵箱中讀取,創建和更新電子郵件」
  3. 嘗試從mailbox.getCal lbackTokenAsync和使用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權限 - >成功。這個應用程序與「scp」的jwt令牌:「full_access_as_user Mail.Read Mail.ReadWrite Mail.Send」
  9. 與另一個交換用戶使用外接令牌嘗試 - 也失敗。
  10. Office AddIn文檔指出EWS UpdateItem操作在插件的上下文中受支持。請參閱Office Dev Center
  11. 摘要:只有具有Addin OAuth令牌的Ews UpdateItem失敗。其他操作成功並使用其他令牌(或基本身份驗證)發佈UpdateItem也會成功。

回答

2

你應該可以使用UpdateItem和makeEwsRequestAsync。您不能使用getCallbackTokenAsync,因爲此調用返回只讀的令牌,只能用於GetItemGetAttachment。製作與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

+0

這完美的作品。但是當我在收件箱中時,它會立即應用自定義類別,我可以立即在視圖中看到它,但是當我位於sentitems文件夾中時,它不會顯示,我必須再次清除offlineitec文件夾和抓取項目以查看更改 – Hitendra

+0

當我這樣做時,類別會出現,直到我點擊其他東西。當我回到郵件項目時,消息「這是最新版本,bu你是否對另一個副本進行了更改。點擊這裏查看其他版本「出現,點擊它,我可以看到帶有添加的類別的版本。 – ryan