Scenario:

清单上的许可: ReadWriteMailbox

我们有一个Outlook加载项,它有一个按钮,可以从OWA / Outlook桌面加载项的撰写模式发送电子邮件 . 我们正在这样做

发出 POST 呼叫https:// resturl /v2.0/me/messages/ restId / send

dataType:'json',

Headers

'Authorization':'Bearer callbackToken '

Problem: 电子邮件在OWA(Outlook Web)中成功发送,但在Outlook 2016桌面上,我们收到403 Forbidden响应

  • 代码:ErrorAccessDenied

  • message:您尝试访问的API不支持项目范围OAuth .

Our Analysis

据我们调查,Outlook 2016 MSI安装不支持API要求集的v1.5

看到这个:API requirement set

因为,有两个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");
    }
  });

获取休息ID的代码

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);
  }
}

获取其余网址的代码

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.
}

最有可能的是,在Outlook桌面上执行的getCallbackTokenAsync是v1.3 API集的并且获取了一些不同的令牌(用于获取项目的附件我猜) . 尽管我不是100%确定这确实是错误的我们的应用 .

如果我能获得使用API v1.4要求集发送电子邮件的修复程序,将不胜感激 . 其他论坛上没有关于此事的内容,也没有关于此事的官方文档 .