【问题标题】:Outlook Web App (Exchange 2013 On-Premise) API 1.2 How to access Email Body?Outlook Web App (Exchange 2013 On-Premise) API 1.2 如何访问电子邮件正文?
【发布时间】:2016-04-18 03:41:40
【问题描述】:

Office.context.mailbox.item.body 给出 null 而

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

有没有办法用JavaScript API 1.1/1.2获取邮件正文?

【问题讨论】:

    标签: outlook-addin outlook-web-addins


    【解决方案1】:

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

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

    对于解决方案 1),您的请求可能类似于以下 js sn-p(请注意,我使用了带有 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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-06
      • 1970-01-01
      • 2017-08-12
      • 2016-11-25
      • 1970-01-01
      • 2016-07-10
      • 2011-08-10
      • 1970-01-01
      相关资源
      最近更新 更多