Надстройка Outlook JS: вызовы EWS с использованием Ajax и Callback Token - PullRequest
0 голосов
/ 15 января 2019

В 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. Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Маркер обратного вызова, который вы получаете от getCallbackTokenAsync, работает только в течение 5 минут и подходит только для операций GetAttachment и GetItem EWS, это задокументировано в https://docs.microsoft.com/en-us/office/dev/add-ins/reference/objectmodel/requirement-set-1.5/office.context.mailbox, поэтому ваш запрос CreateItem не будет работать в этом контексте. Должно ли сообщение приходить от пользователя, если оно просто сообщает о СПАМЕ? было бы просто выполнить отправку, используя служебную учетную запись в EWS, или даже просто отправить ее по SMTP.

0 голосов
/ 15 января 2019

Ваш почтовый ящик (_mailbox = Office.context.mailbox;) имеет метод makeEwsRequestAsync, который можно использовать для вызова SOAP в EWS. Обратите внимание, что вам не нужно явно указывать токен доступа.

Здесь - дополнительная информация.

...