是否可以在Outlook加载项SOAP API中使用JavaScript获取附件?

时间:2018-02-12 08:10:52

标签: office-js outlook-web-addins

设置是Outlook 2013和Exchange Server 2013(内部部署)。根据{{​​3}}:

  

加载项可以使用附件API将有关附件的信息发送到远程服务。然后,该服务可以直接联系Exchange服务器以检索附件。

由于设置是内部部署,因此不会暴露给外部世界。因此,远程服务将无法访问它。

这样的事情可以纯粹用JavaScript完成吗?

我尝试了这个没有成功:

function getAttachmentViaSOAP(attachmentId) {
  var request =
    '<?xml version="1.0" encoding="utf-8"?>' +
    '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"' +
    '               xmlns:xsd="http://www.w3.org/2001/XMLSchema"' +
    '               xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"' +
    '               xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">' +
    '  <soap:Header>' +
    '    <RequestServerVersion Version="Exchange2013" xmlns="http://schemas.microsoft.com/exchange/services/2006/types" soap:mustUnderstand="0" />' +
    '  </soap:Header>' +
    '  <soap:Body>' +
    '   <GetAttachment xmlns="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">' +
    '     <AttachmentShape/>' +
    '     <AttachmentIds>' +
    '       <t:AttachmentId Id="' + attachmentId + '"/>' +
    '     </AttachmentIds>' +
    '   </GetAttachment>' +
    '  </soap:Body>' +
    '</soap:Envelope>';

  return request;
}

function sendAttachmentRequest(attachment) {
  var settings = {
    'async': true,
    'crossDomain': true,
    'url': attachment.outlook_exchange_server_url,
    'method': 'POST',
    'headers': {
      'Authorization': 'Bearer ' + attachment.attachment_token,
      'Content-Type': 'text/xml; charset=utf-8',
      'Cache-Control': 'no-cache'
    },
    'data': getAttachmentViaSOAP(attachment.attachment_id)
  }

  $.ajax(settings).done(function (response) {
    console.log(response);
  });
}

是否可以将CORS设置添加到IIS / Exchange服务器以允许此操作?或其他任何方式吗?

2 个答案:

答案 0 :(得分:0)

Outlook Web Add-in的核心是在远程Web主机上运行的Web应用程序。如果您的Web服务器无法与您的Exchange Server通信,那么几乎 nothing 将起作用。

鉴于此严重限制,Outlook Web加载项可能不适合您的解决方案。

答案 1 :(得分:0)

今天无法通过JavaScript实现这一目标。但是,我们正在考虑如何在最近的Outlook客户端中解决这个问题。这意味着如果添加了解决方案,则Outlook 2013和Exchange 2013本地安装程序将不支持该解决方案。