1

Мы разрабатываем надстройку Outlook с помощью api office JavaScript api и вам необходимо обновить категорию для почтового сообщения.Доступ запрещен в UpdateItem с помощью Exchange EWS при вызове из Outlook JavaScript Api (office.js)

При попытке вызова UpdateItem с обменом EWS, используя надстройку в маркер - он терпит неудачу с 500.

См запроса и ответа на: http://pastebin.com/55x2d2Ht

  1. разрешений манифесте приложения является ReadWriteMailbox (самая высокая)
  2. Когда приложение выбрано в OWA/manageapps - оно отображает «Когда это добавление будет нажато, оно сможет: читать, создавать и обновлять электронную почту в вашем почтовом ящике»
  3. Пробовал оба токена из почтового ящика.getCal lbackTokenAsync и использование makeEwsRequestAsync.
  4. Операции EWS GetItem и CreateItem успешно завершены - это только ошибка UpdateItem
  5. Ответ на UpdateItem: 500 Запрошенный веб-метод недоступен для этого вызывающего абонента или приложения.
  6. Тот факт, что 500 (а не 403) может означать, что операция UpdateItem блокируется надстройку приложение вообще
  7. The JWT лексемы (от getCallbackTokenAsync) не имеет «УПП» ключ
  8. Если же UpdateItem XML Soap-пакет отправляется с другим токеном из тестового приложения OAuth, зарегистрированного в Azure с разрешениями. Чтение/запись на Exchange -> это успешно. Это токен jwt приложения с «scp»: «full_access_as_user Mail.Read Mail.ReadWrite Mail.Send»
  9. Пробовал с другим пользователем обмена с токеном надстройки - также не удается.
  10. В документах Office AddIn указано, что операция EWS UpdateItem поддерживается в контексте addin. См. Office Dev Center
  11. Реферат: Ошибка только с Ews UpdateItem с токеном Addin OAuth. Другие операции успешно завершены, и публикация UpdateItem с использованием других токенов (или Basic Auth) также преуспевает.

ответ

2

Вы должны иметь возможность использовать UpdateItem с makeEwsRequestAsync. Вы не можете использовать getCallbackTokenAsync, потому что этот вызов возвращает токен, который доступен только для чтения, который может использоваться только для GetItem и 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

+0

Это отлично работает. но когда я нахожусь в папке «Входящие», я сразу же применяю специальную категорию, и я сразу вижу ее в поле зрения, но когда я нахожусь в папке sentitems, она вообще не отображается, мне нужно очистить автономный кеш для отправки и отправки элементов отправителя и снова просмотреть его, чтобы увидеть изменения – Hitendra

+0

Когда я это делаю, категория появляется, пока я не нажму на что-то еще. Когда я вернусь к элементу почты, появится сообщение «Это самая последняя версия, bu т вы внесли изменения в другую копию. Нажмите здесь, чтобы просмотреть другие версии. »Нажмите на это, и я вижу версию с добавленной категорией. – ryan