Scenario:
清单上的许可: ReadWriteMailbox
我们有一个Outlook加载项,它有一个按钮,可以从OWA / Outlook桌面加载项的撰写模式发送电子邮件 . 我们正在这样做
-
获取回调令牌 .
-
获取项目休息ID .
-
获取休息网址(原来是https://outlook.office365.com/api) .
发出 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方法
我们使用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要求集发送电子邮件的修复程序,将不胜感激 . 其他论坛上没有关于此事的内容,也没有关于此事的官方文档 .