Как получить сообщение с помощью Office. js в надстройке реагирования - PullRequest
0 голосов
/ 20 февраля 2020

Я создаю новую реагирующую надстройку Outlook, и мне нужно иметь возможность загрузить текущую электронную почту.

Office. js API имеет метод getFileAsyn c из Office.context. объект документа, но не объект Office.context.mailbox.item.

также в качестве требования это должно работать как в Office, так и в локальной установке Outlook.

В существующем ком-дополнении у меня был прямой доступ к почтовому элементу.

Вот код, который мне в настоящее время приходится вызывать в 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) });
      }
    });
  }

1 Ответ

0 голосов
/ 24 февраля 2020

Это не идеально, но 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) {

      }
    });
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...