我如何在React加载项中使用Office.js获得消息

问题描述 投票:0回答:1

我正在构建新的React Outlook加载项,并且需要能够下载当前电子邮件。

Office.js API的Office.context.document对象具有getFileAsync方法,而Office.context.mailbox.item对象则没有。

也是一项要求,它需要在Office Online和Outlook的本地安装中都可以使用。

在现有的com加载项中,我可以直接访问该邮件项目。

这是我当前必须调用API的代码,但这仅检索元数据。

/*
  https://docs.microsoft.com/en-us/outlook/add-ins/use-rest-api#get-the-item-id
  */
  public getMessageViaRest = () => {
    const context: Office.AsyncContextOptions & { isRest: boolean } = {
      isRest: true
    };

    Office.context.mailbox.getCallbackTokenAsync(context, (tokenResults) => {
      if (tokenResults.status === Office.AsyncResultStatus.Failed) {
        this.setState({ error: 'Failed to get rest api auth token' });
        return;
      }

      const apiId: string = Office.context.mailbox.convertToRestId(Office.context.mailbox.item.itemId, 'v2.0');
      const apiUrl = Office.context.mailbox.restUrl + '/v2.0/me/messages/' + apiId;

      try {
        fetch(apiUrl, {
          method: 'GET',
          headers: new Headers({
            Authorization: 'Bearer ' + tokenResults.value
          })
        }).then((response) => {
          response.json().then((body) => {
            for (const key in body) {
              this.state.details.push({ name: key, value: JSON.stringify(body[key]) });
            }
            this.forceUpdate();
          });
        });
      } catch (error) {
        this.setState({ error: JSON.stringify(error) });
      }
    });
  }
outlook add-in
1个回答
0
投票

并不完美,但是REST Api确实有一个端点,它将返回文件的EML内容。

public downloadViaRest = () => {
    const context: Office.AsyncContextOptions & { isRest: boolean } = {
      isRest: true
    };

    Office.context.mailbox.getCallbackTokenAsync(context, (tokenResults) => {
      if (tokenResults.status === Office.AsyncResultStatus.Failed) {
        this.setState({ error: 'Failed to get rest api auth token' });
        return;
      }

      const apiId: string = Office.context.mailbox.convertToRestId(Office.context.mailbox.item.itemId, 'v2.0');
      const apiUrl = Office.context.mailbox.restUrl + '/v2.0/me/messages/' + apiId + '/$value';

      try {
        fetch(apiUrl, {
          method: 'GET',
          headers: new Headers({
            Authorization: 'Bearer ' + tokenResults.value
          })
        }).then((response) => {
          response.blob().then((blob) => {
            const url = window.URL.createObjectURL(blob);
            const a = document.createElement('a');
            a.href = url;
            a.download = 'Message.eml';
            a.click();
          });
        });
      } catch (error) {

      }
    });
  }
© www.soinside.com 2019 - 2024. All rights reserved.