Я создаю надстройку Outlook, и я пытаюсь «загрузить» текущий выбранный элемент (= почтовое сообщение) с помощью API-интерфейсов EWS Java используя токен входа. Следующий шаг - получение вложений и обработка их на нашем системном сервере.Использовать маркер надстройки Outlook, чтобы получить текущий сервер товаров с API-интерфейсом EWS.
Я следую за dev doc, где я использую метод mailbox.getCallbackTokenAsync
для извлечения маркера входа. Я отправляю этот токен на наш сервер (который также обслуживает надстройку) и использует EWS Java Api для извлечения текущего выбранного элемента.
Но я не могу войти в систему с токеном. Исключение я получаю это серверный The remote server returned an error: (401)Unauthorized
В оном в знаке Я использую следующий код яваскрипта, чтобы позвонить в нашем сервисе:
(function(){
'use strict';
// The Office initialize function must be run each time a new page is loaded
Office.initialize = function(reason){
jQuery(document).ready(function(){
getAccessToken();
});
};
// Retrieves an acccess token
function getAccessToken(){
Office.context.mailbox.getCallbackTokenAsync(exchangeTokenCallback);
}
function exchangeTokenCallback(asyncResult, userContext) {
if (asyncResult.status === "succeeded") {
// get info about selected mail message...
var item = Office.cast.item.toItemRead(Office.context.mailbox.item);
var email = Office.context.mailbox.userProfile.emailAddress;
var loginToken = asyncResult.value;
$.ajax({
headers: {"X-Outlook-Token-For-EWS":loginToken,
"X-Outlook-EwsUrl":Office.context.mailbox.ewsUrl,
"X-Outlook-ItemId": item.itemId
},
url: "/ac/api/email/ews"
}).done(function(result) {
jQuery('#result').text(JSON.stringify(result));
}).error(function(result) {
jQuery('#result').text(JSON.stringify(result));
});
} else {
showToast("Error", "Could not get callback token: " + asyncResult.error.message);
}
};
})();
И сервис использует этот Java код, чтобы получить деталь (params
объект содержит информацию, которую я отправил в заголовках в JavaScript выше):
package nl.c2c.ac.api.service.email.outlookaddin;
import java.net.URI;
import microsoft.exchange.webservices.data.core.ExchangeService;
import microsoft.exchange.webservices.data.core.PropertySet;
import microsoft.exchange.webservices.data.core.service.item.Item;
import microsoft.exchange.webservices.data.credential.TokenCredentials;
import microsoft.exchange.webservices.data.property.complex.ItemId;
import nl.c2c.ac.exceptions.CustomException;
public class EmailOutlookAddinService {
private EmailOutlookAddinParams params;
public EmailOutlookAddinService(EmailOutlookAddinParams params){
setParams(params);
}
public String retrieveMessage() throws Exception{
ExchangeService service = null;
try {
TokenCredentials credentials = new TokenCredentials(params.getAccessToken());
service = new ExchangeService();
service.setCredentials(credentials);
service.setUrl(new URI(params.getEwsUrl())); //new URI("https://outlook.office365.com/EWS/Exchange.asmx")
Item itm = service.bindToItem(new ItemId(params.getItemId()), PropertySet.getIdOnly());
return "Subject: " + itm.getSubject();
}catch(Throwable e){
throw new CustomException(e);
} finally {
if(service!=null){
service.close();
}
}
}
private void setParams(EmailOutlookAddinParams params) {
this.params = params;
}
}
Я надеюсь, что кто-то с большим опытом может мне точку в правильном направлении.