В Office JS API установлен лимит обратных вызовов в 1 Мб, и одно из требований, которое у меня есть, - пересылать существующее электронное письмо, обозначенное пользователем как спам, как вложение третьему лицу. У меня есть обширный код для обработки почтовых операций, использующий makeEwsRequestAsync, и для этого случая SOAP, который прекрасно работает для возврата содержимого MIME для создания и отправки электронной почты, но не тогда, когда возврат обратного вызова превышает 1 Мб.
Чтобы обойти ограничение в 1 Мб, другим было предложено сделать вызов EWS напрямую, используя токен обратного вызова, идентификатор элемента и URL-адрес EWS. Я могу легко получить эти компоненты, и у меня есть SOAP, который работает для обычного метода makeEwsRequestAsync.
Чего у меня нет, так это как сделать вызов в EWS с помощью элементов, которые у меня есть.
В качестве примера я использовал следующее для получения URL-адреса EWS и идентификатора элемента:
_mailbox = Office.context.mailbox;
_ewsUrl = _mailbox.ewsUrl;
var item = _mailbox.item;
_itemId = item.itemId;
Я использую это для получения токена обратного вызова:
mailViaEws.Authenticate = function Start() {
getCallbackToken(setCallbackToken);
};
function getCallbackToken(callback) {
var options = {
isRest: false
};
Office.context.mailbox.getCallbackTokenAsync(options, callback);
}
function setCallbackToken(asyncResult) {
if (asyncResult.status === "succeeded") {
_callbackToken = asyncResult.value;
} else {
app.showNotification(_appName, asyncResult.error.message);
}
}
SOAP выглядит следующим образом с помощью вспомогательного метода для переноса SOAP:
var soapToCreateItem =
'<soap:Body>' +
' <m:CreateItem MessageDisposition="SendAndSaveCopy"' +
' xmlns="http://schemas.microsoft.com/exchange/services/2006/messages" ' +
' xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">' +
' <m:Items>' +
' <t:Message>' +
' <t:Subject>' + _subject + '</t:Subject>' +
' <t:Body BodyType="Text">' + _bodyText + '</t:Body>' +
' <t:ToRecipients>' + _adddressesSoap + '</t:ToRecipients>' +
' </t:Message>' +
' </m:Items>' +
' </m:CreateItem>' +
' </soap:Body>';
var soapToCreateItemData = getSoapBoadyEnvelope(soapToCreateItem);
Я интенсивно искал, и хотя я нашел код, который использует промежуточный сервис для вызова EWS Managed API в C #, я пытаюсь сделать вызов непосредственно в EWS. Любая помощь будет принята с благодарностью.