Outlook Web App(Exchange 2013内部部署)API 1.2如何访问电子邮件正文?

时间:2016-04-18 03:41:40

标签: outlook-addin outlook-web-addins

Office.context.mailbox.item.body

时给出null

Office.context.mailbox.item.body.getAsync()仅适用于JavaScript API 1.3

有没有办法通过JavaScript API 1.1/1.2获取电子邮件正文?

1 个答案:

答案 0 :(得分:1)

是的,你可以。实际上,您将使用Exchange Web服务检索正文。

正如here所述,有两种方法可以做到这一点:1)来自javascript(客户端应用程序)的SOAP请求或2)使用SDK(如.NET Exchange Web SDK)的服务器端

对于解决方案1),您的请求可能看起来像以下js片段(请注意,我使用了that.$q.defer();的angular.js承诺,但这不是强制性的)

           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;
        };

对于使用.NET Exchange SDK的解决方案2)

            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;