Outlook Web App (Exchange 2013 On-Premise) API 1.2 How to access Email Body?

痞子三分冷 提交于 2019-12-23 12:59:42

问题


Office.context.mailbox.item.body gives null while

Office.context.mailbox.item.body.getAsync() works only with JavaScript API 1.3.

Is there any way to fetch email body with JavaScript API 1.1/1.2?


回答1:


Yes you can. Actually, you will retrieve the body using Exchange Web Services.

As explained here there are two ways to do this: 1) SOAP request from javascript (client app) or 2) server side using an SDK such as the .NET Exchange Web SDK

For solution 1), your request could look like the following js snippet (note that I have used an angular.js promise with that.$q.defer(); but this is not mandatory)

           function getSoapEnvelope(request) {
            // Wrap an Exchange Web Services request in a SOAP envelope.
            var result =
            '<?xml version="1.0" encoding="utf-8"?>' +
            '<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"' +
            '               xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">' +
            '  <soap:Header>' +
            '     <t:RequestServerVersion Version="Exchange2013"/>' +
            '  </soap:Header>' +
            '  <soap:Body>' +
            request +
            '  </soap:Body>' +
            '</soap:Envelope>';

            return result;
           }



            var getBodyAsync = function () {
            var that =this;
            var deferred = that.$q.defer();

            function getHeadersRequest(id) {
                // Return a GetItem EWS operation request for the headers of the specified item.  
                var result =
             '    <GetItem xmlns="http://schemas.microsoft.com/exchange/services/2006/messages">' +
             '      <ItemShape>' +
             '        <t:BaseShape>IdOnly</t:BaseShape>' +
             '        <t:BodyType>HTML</t:BodyType>' +
             '        <t:AdditionalProperties>' +
             '            <t:FieldURI FieldURI="item:Body"/>' +
             '        </t:AdditionalProperties>' +
             '      </ItemShape>' +
             '      <ItemIds><t:ItemId Id="' + id + '"/></ItemIds>' +
             '    </GetItem>';
                return result;
            }
                // Create a local variable that contains the mailbox. 
            var mailbox = Office.context.mailbox;
            var request = getHeadersRequest(mailbox.item.itemId);
            var envelope = getSoapEnvelope(request);

            var callback = function (data) {
                var $data = $(data.value);
                var $body = $("t\\:Body", $data);
                deferred.resolve($body.html());
            }

            mailbox.makeEwsRequestAsync(envelope, callback);
            return deferred.promise;
        };

And for solution 2) with .NET Exchange SDK

            ExchangeService service = new ExchangeService();
            service.Credentials = new OAuthCredentials(token);
            service.Url = new Uri(ewsUrl);

            PropertyDefinition definition = ItemSchema.NormalizedBody;
            var propertySet = new PropertySet(definition, ItemSchema.Attachments,
                ItemSchema.HasAttachments);
            EmailMessage ewsEmail = EmailMessage.Bind(service, new ItemId(itemId), propertySet);


            return ewsEmail.NormalizedBody.Text;


来源:https://stackoverflow.com/questions/36685110/outlook-web-app-exchange-2013-on-premise-api-1-2-how-to-access-email-body

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!