Outlook JS加载项:使用Ajax和回调令牌的EWS调用

时间:2019-01-14 21:04:28

标签: javascript outlook office365 exchangewebservices outlook-addin

Office JS API的回调限制为1 Mb,我的要求之一是将现有的电子邮件(由用户指定为垃圾邮件)转发给第三者。我使用makeEwsRequestAsync编写了广泛的代码来处理邮件操作,在这种情况下,SOAP可以很好地返回MIME内容以创建和发送电子邮件,但是当回调返回大于1 Mb时却不能。

要绕过1 Mb的限制,建议其他人使用回调令牌,项目ID和EWS URL直接进行EWS呼叫。我可以轻松获得这些组件,并且具有适用于常规makeEwsRequestAsync方法的SOAP。

我没有的是如何使用我拥有的元素进行EWS呼叫。

作为示例,我使用以下代码获取EWS URL和项目ID:

    _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);

我已经进行了广泛的搜索,尽管我发现使用中间服务调用C#中的EWS托管API的代码,但我试图直接对EWS进行调用。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

您的邮箱(_mailbox = Office.context.mailbox;)对象具有方法makeEwsRequestAsync,可用于对EWS进行SOAP调用。 请注意,您不需要显式提供访问令牌。

Here是更多信息。

答案 1 :(得分:0)

从getCallbackTokenAsync获得的Callback令牌仅持续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发送即可。