【发布时间】:2020-06-22 03:53:17
【问题描述】:
我们的 Outlook 插件在大多数情况下都适用于共享邮箱,除非电子邮件中的附件是“Office.MailboxEnums.AttachmentType.Item”类型的文件,例如“.msg”文件。
Environment is Outlook web and desktop.
我们主要通过 REST 获取所有附件内容,因为它们以 base-64 格式返回,但“AttachmentType.Item”的正文是电子邮件正文,而不是 base-64。在这种情况下,我们调用 EWS 以下载该附件,处理正文并以 byte[] 形式返回;
我们目前遇到的问题是,当共享邮箱上的附件类型为“.msg”时,EWS 返回错误“ErrorAccessDenied”,这很奇怪,因为下载了其他附件并且我们'我们确保我们通过了“TargetMailbox”
我们通过:https://docs.microsoft.com/en-us/office/dev/add-ins/outlook/delegate-access获取目标邮箱
一旦我们有了 accessToken 和 targetMailbox,我们就调用后端
GetData(token, Id){
let sharedMailBox = GetTargetMailbox(token);
return this.$http.post("DownloadAttachment", {
token: sharedMailBox.token,
url: Office.context.mailbox.ewsUrl,
attachmentId: Id,
mailbox: sharedMailBox.mailbox
}, {
responseType: 'arraybuffer',
}).then(response => response.data);
}
后台
DownloadAttachment(Request request){
var service = new ExchangeService
{
Credentials = request.token,
Url = request.url
};
if (request.mailbox != "")
{
FolderId SharedMailbox = new FolderId(WellKnownFolderName.Inbox, request.TargetMailbox);
ItemView itemView = new ItemView(1);
service.FindItems(SharedMailbox, itemView); //This throws ErrorAccessDenied
}
//do other stuff and return data
}
不确定,如何获取共享邮箱的 itemAttachment。
【问题讨论】:
-
共享邮箱不支持 EWS,仅支持 REST。这可能在我们的文档中被遗漏了。我们会更新它。要通过 REST 获取项目附件,请遵循 docs.microsoft.com/en-us/graph/outlook-get-mime-message 中的“获取附加到 Outlook 项目或群组帖子的 Outlook 邮件的 MIME 内容”。要通过 REST 获取项目附件,请遵循“获取附加到 Outlook 的 Outlook 邮件的 MIME 内容”项目或群组帖子”在docs.microsoft.com/en-us/graph/outlook-get-mime-message
-
啊,对,浏览了这个文档,是的,它没有说明任何关于委托访问的内容。 docs.microsoft.com/en-us/exchange/client-developer/…。可能必须更新加载项才能同时使用 v2 API 和 Graph API。
-
这解决了您的问题吗?我们发布了相同的评论作为问题的答案。
-
是的,我们现在只过滤共享邮箱的任何 itemAttachments。谢谢,很高兴在文档中看到对此的参考,因为我花了几天时间试图解决这个问题。干杯
-
也就是说,在测试中发现一些“.msg”文件是通过 REST 下载的,因为它们的类型是“fileAttachment”stackoverflow.com/q/62550158/1381217,但这很好,因为我们可以检索内容。过滤几个“.msg”文件而不是其他文件有点令人困惑。
标签: outlook office-js exchangewebservices office-addins outlook-web-addins