Как получить токен обратного вызова для отправки электронных писем для набора API v1.3
Сценарий:
Разрешение на манифест: ReadWriteMailbox
У нас есть надстройка для Outlook, которая имеет кнопку для отправки электронной почты из режима компоновки надстройки OWA/Outlook Desktop. Мы делаем это путем
- Получить токен обратного вызова.
- Получить предмет отдыха ID.
- Получить 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 согласно
мы используем тот, у которого для опции 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. На других форумах ничего нет по этому поводу, а также по официальной документации по этому вопросу.