Как получить токен обратного вызова для отправки электронных писем для набора API v1.3

Сценарий:

Разрешение на манифест: ReadWriteMailbox

У нас есть надстройка для Outlook, которая имеет кнопку для отправки электронной почты из режима компоновки надстройки OWA/Outlook Desktop. Мы делаем это путем

  1. Получить токен обратного вызова.
  2. Получить предмет отдыха ID.
  3. Получить URL-адрес отдыха (который будет https://outlook.office365.com/api).

Выполнение POST- вызова на https: // resturl /v2.0/me/messages/ restId / send

dataType: 'json',

Заголовки

"Авторизация": " Обратный звонок на предъявителя"

Проблема: электронная почта успешно отправляется в OWA (Outlook Web), но в Outlook 2016 Desktop мы получаем 403 Запрещенный ответ с

  • код: ErrorAccessDenied
  • сообщение: API, к которому вы пытаетесь получить доступ, не поддерживает OAuth с областью действия элемента.

Наш анализ

Насколько мы исследовали, установка Outlook 2016 MSI не поддерживает v1.5 набора требований API

увидеть это: набор требований API

Так как есть два метода getCallbackTokenAsync согласно

https://dev.office.com/reference/add-ins/outlook/1.5/Office.context.mailbox?product=outlook&version=v1.5

мы используем тот, у которого для опции isRest установлено значение true, то есть версия v1.5

Наш код для получения токена обратного вызова:

Office.context.mailbox.getCallbackTokenAsync({
    isRest: true
  },
  function(asyncResult) {
    if (asyncResult.status === "succeeded") {
      deferred.resolve(asyncResult.value);
    } else {
      deferred.reject("Could not retrieve token");
    }
  });

Код для получения идентификатора отдыха

function _getItemRestId() {
  // Currently the only Outlook Mobile version that supports add-ins
  // is Outlook for iOS.            
  if (Office.context.mailbox.diagnostics.hostName === 'OutlookIOS') {
    // itemId is already REST-formatted
    return Office.context.mailbox.item.itemId || pvt.currentMailId;
  } else {
    // Convert to an item ID for API v2.0
    return Office.context.mailbox.convertToRestId(Office.context.mailbox.item.itemId || pvt.currentMailId, Office.MailboxEnums.RestVersion.v2_0);
  }
}

Код, чтобы получить остальной URL

function _getRestUrl() {
  $timeout(function() {
    notificationService.showInfo('This is the rest URL==> ' + Office.context.mailbox.restUrl);
  });
  console.log('Office REST URL =>', Office.context.mailbox.restUrl);
  return Office.context.mailbox.restUrl || 'https://outlook.office.com/api'; // This is because this requires v1.5 api set requirements which is not yet supported in Outlook for Windows.
}

Скорее всего, getCallbackTokenAsync, который выполняется на Outlook Desktop, является набором API v1.3 и дает нам другой токен (для получения вложений для элемента, который я предполагаю), хотя я не уверен на 100%, что это именно то, что не так с наше приложение.

Буду признателен, если я смогу получить исправление для отправки электронных писем с использованием набора требований API v1.4. На других форумах ничего нет по этому поводу, а также по официальной документации по этому вопросу.

0 ответов

Другие вопросы по тегам