Outlook add-in 权限被拒绝
Outlook add-in Permission Denied
我在尝试阅读电子邮件中的 headers 时遇到以下错误:
code: 7000
message: "You don't have sufficient permissions for this action."
name: "Permission Denied"
我正在使用 Mac 16.41 的新版 Outlook 和最新的 iOS 版。在这两个应用程序中,我无法阅读所选电子邮件中的 headers,即使 它可以在 Web 或旧版本的 Outlook 上运行。
我正在使用以下方法加载 headers:
private _loadHeaders(): Promise<string> {
return new Promise((resolve, reject) => {
this.mailbox.item.getAllInternetHeadersAsync(({ status, value, error }) => {
if (status === Office.AsyncResultStatus.Succeeded) {
const header = value.replace(/[\r\n]+? ?=\?[a-z\-]+\?[A-Z]{1}\?([\S]+)\?=?/g, (_, data) => data.replace("=2E", ".").replace("=5F", "_"));
return resolve(header);
} else {
return reject(error);
}
});
});
}
并在我的清单中拥有以下权限:
<Permissions>ReadWriteMailbox</Permissions>
任何帮助将不胜感激。谢谢!
事实证明,getAllInternetHeadersAsync
仅在 requirement set 1.8
中可用,iOS 或 2020 年 8 月的现代 mac 应用程序不支持。解决方案是使用 Exchange 休息请求。我正在分享我使用的代码,以防将来有人需要它(打字稿)。
private get _itemRestId() {
if (this._mailbox.diagnostics.hostName === 'OutlookIOS') {
// itemId is already REST-formatted
return this._mailbox.item.itemId;
} else {
// Convert to an item ID for API v2.0
return this._mailbox.convertToRestId(
this._mailbox.item.itemId,
Office.MailboxEnums.RestVersion.v2_0
);
}
}
private get _headersUrl() {
return `${this._restUrl}/v2.0/me/messages/${this._itemRestId}?$select=*,internetMessageHeaders`;
}
private get _accessToken(): Promise<string> {
return new Promise((resolve, reject) => {
this._mailbox.getCallbackTokenAsync({ isRest: true }, ({ status, value, error }) => {
if (status === Office.AsyncResultStatus.Succeeded) {
return resolve(value);
} else {
return reject(error)
}
});
});
}
get headers(): Promise<string> {
return this._accessToken
.then(accessToken => fetch(this._headersUrl, {
headers: {
'Content-Type': 'application/text',
'Authorization': 'Bearer ' + accessToken
}
}))
.then(response => response.json())
.then(data => data.InternetMessageHeaders.reduce((carry, item) => `${carry}\n\r${item.Name}: ${item.Value}`, ""));
}
我在尝试阅读电子邮件中的 headers 时遇到以下错误:
code: 7000
message: "You don't have sufficient permissions for this action."
name: "Permission Denied"
我正在使用 Mac 16.41 的新版 Outlook 和最新的 iOS 版。在这两个应用程序中,我无法阅读所选电子邮件中的 headers,即使 它可以在 Web 或旧版本的 Outlook 上运行。
我正在使用以下方法加载 headers:
private _loadHeaders(): Promise<string> {
return new Promise((resolve, reject) => {
this.mailbox.item.getAllInternetHeadersAsync(({ status, value, error }) => {
if (status === Office.AsyncResultStatus.Succeeded) {
const header = value.replace(/[\r\n]+? ?=\?[a-z\-]+\?[A-Z]{1}\?([\S]+)\?=?/g, (_, data) => data.replace("=2E", ".").replace("=5F", "_"));
return resolve(header);
} else {
return reject(error);
}
});
});
}
并在我的清单中拥有以下权限:
<Permissions>ReadWriteMailbox</Permissions>
任何帮助将不胜感激。谢谢!
事实证明,getAllInternetHeadersAsync
仅在 requirement set 1.8
中可用,iOS 或 2020 年 8 月的现代 mac 应用程序不支持。解决方案是使用 Exchange 休息请求。我正在分享我使用的代码,以防将来有人需要它(打字稿)。
private get _itemRestId() {
if (this._mailbox.diagnostics.hostName === 'OutlookIOS') {
// itemId is already REST-formatted
return this._mailbox.item.itemId;
} else {
// Convert to an item ID for API v2.0
return this._mailbox.convertToRestId(
this._mailbox.item.itemId,
Office.MailboxEnums.RestVersion.v2_0
);
}
}
private get _headersUrl() {
return `${this._restUrl}/v2.0/me/messages/${this._itemRestId}?$select=*,internetMessageHeaders`;
}
private get _accessToken(): Promise<string> {
return new Promise((resolve, reject) => {
this._mailbox.getCallbackTokenAsync({ isRest: true }, ({ status, value, error }) => {
if (status === Office.AsyncResultStatus.Succeeded) {
return resolve(value);
} else {
return reject(error)
}
});
});
}
get headers(): Promise<string> {
return this._accessToken
.then(accessToken => fetch(this._headersUrl, {
headers: {
'Content-Type': 'application/text',
'Authorization': 'Bearer ' + accessToken
}
}))
.then(response => response.json())
.then(data => data.InternetMessageHeaders.reduce((carry, item) => `${carry}\n\r${item.Name}: ${item.Value}`, ""));
}