Office.context.mailbox.item.body未定义

时间:2017-07-06 06:36:12

标签: outlook office-js office-addins outlook-web-addins

我正在为outlook开发Office Addin,我使用以下结构,请帮助。

Office.context.mailbox.item.body.getAsync()方法在Office 365中运行良好,但是当涉及到内部交换服务器2013时,它可以在Outlook客户端中运行,但在Outlook Web应用程序中不起作用。最低邮箱要求集版本为1.3

issue

2 个答案:

答案 0 :(得分:1)

这是预期的。 Office.context.mailbox.item.body.getAsync最低邮箱要求版本受 1.3 级别API影响。同时根据" Understanding Outlook API requirement sets" Outlook Web App(Exchange 2013内部部署)仅支持 1.1 级别的API。

答案 1 :(得分:0)

您可以通过调用Office.context.mailbox.getCallbackTokenAsync方法并向EWS服务器进行Ajax调用来检索Office Mailbox API 1.1及更高版本中的电子邮件正文。 Microsoft提供的示例位于以下链接:

https://docs.microsoft.com/en-us/javascript/api/outlook/office.mailbox?view=outlook-js-1.1#getcallbacktokenasync-callback--usercontext-

我的工作示例:

Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, (result) => {
    var ewsId = Office.context.mailbox.item.itemId;
    var token = result.value;

    // var restId = Office.context.mailbox.convertToRestId(ewsId, Office.MailboxEnums.RestVersion.v2_0); this does not work on API version 1.1
    var restId = ewsId.replaceAll("/", "-").replaceAll("+", "_"); // Convert ewsId to restId
    var getMessageUrl = (Office.context.mailbox.restUrl || 'https://outlook.office365.com/api') + '/v2.0/me/messages/' + restId;
    var xhr = new XMLHttpRequest();
    xhr.open('GET', getMessageUrl);
    xhr.setRequestHeader('Prefer', 'outlook.body-content-type="html"') // for retrieving body as HTML
    xhr.setRequestHeader("Authorization", "Bearer " + token);
    xhr.onload = (e) => {
      var json = JSON.parse(xhr.responseText);
      var emailBody = json.Body.Content;
    }
    xhr.send();
  });