【问题标题】:Obtain attachment content from OWA through Outlook web add-in通过 Outlook Web 加载项从 OWA 获取附件内容
【发布时间】:2018-12-16 09:09:27
【问题描述】:

我正在尝试使用我的加载项中的 Office.context.mailbox.item.getAttachmentsAsync() API 调用从邮件项中获取附件的内容,但是我遇到了一些意外结果。 .

在我的加载项中,我得到了邮件项目中所有附件的列表:

var listOfAttachments = item.attachments;
if (listOfAttachments.length > 0) {
    for (i = 0; i < listOfAttachments.length; i++) {
        _att = listOfAttachments[i];
        console.log("Attachment name: " + _att.name);
        console.log("Attachment type: " + _att.attachmentType);
        console.log("Attachment content type: " + _att.contentType);
        console.log("Attachment ID: " + _att.id);
        console.log("string length: " + _att.id.length);
     }

这很好用...但是,我意识到附件 ID 超过 100 个字符(实际上是 180 个字符)。而在getAttachmentContentAsync()函数的API参考中,第一个参数是附件ID,参考说明:“你要获取的附件的标识符,字符串最大长度为100个字符。”

因此,基于此,我想我已经确定了问题所在。现在的问题是,如何解决。此 API 需要什么附件 ID?

谢谢!

更新:这是我用来检索附件内容的代码:

var options = { asyncContext: { type: _att.attachmentType } };
item.getAttachmentContentAsync(_att.id, options, function (result) {
            if (result.status == Office.AsyncResultStatus.Succeeded) {
                console.log("Call returned success!");
                var AttachmentContent = result.value; // Get the attachment content
                if (AttachmentContent.format == Office.MailboxEnums.AttachmentContentFormat.Base64) {
                    // handle file attachment
                    console.log("Base64 String: " + AttachmentContent.content);
                }
                else if (result.format == Office.MailboxEnums.AttachmentContentFormat.Eml) {
                    // handle item attachment
                }
                else {
                    // handle cloud attachment  
                }
            } else {
                var err = result.error;
                console.log("Call failed: " + err.name + ": " + err.message);
            }
        });

我得到的错误是: 无法获取未定义或空引用的属性“状态”

为了排除故障,我打印了附件 ID: AAMkADU4OTU2Mjg4LthiNzktNDY0Yi1hZmE4LWFmMjAzZjczYjIxOQBGAAAAAADiRE+1naePQ7MPCJEcJqgqBwCgpNXsitDwTY/mc0w2Y/zOAAAAAAEMAACgpNXsitDwTY/mc0w2Y/zOAAARXFqBAAABEGAQAN0NYKX5HP

我从几页中了解到,不同的 API 要求附件 id 的格式略有不同。所以我不确定这是否是问题的根源......

【问题讨论】:

  • 我相信您的意思是使用 getAttachmentContentAsync 方法?这是接收附件 ID 的方法,而 getAttachmentsAsync 没有。此外,我们不强制限制 100 个字符,我们将更新文档以反映这一点。当您使用附件 ID 调用 getAttachmentContentAsync 时,您看到了哪些确切的错误?
  • 您好 Outlook 插件团队,是的,我的意思是 getAttachmentContentAsync。我已经更新了我原来的帖子。另外,我发布了我为调用该函数而编写的代码,请看一下它是否正确使用它。谢谢!
  • 您的代码似乎在我们这边运行良好,没有任何错误。我们在一封已读的电子邮件上进行了尝试(我相信这是您正在尝试的地方)并获得了预期的结果。您能否调试并检查回调中结果对象的值是多少?此外,所有带有附件的电子邮件都会发生这种情况吗?这甚至发生在带有附件的草稿电子邮件上吗?
  • 另请注意,此 API 仍处于预览阶段,尚未完全发布给所有客户/客户以供使用。也有可能您碰巧在尚未启用此功能的发布频道上。
  • 插件团队您好,我目前正在测试的平台是outlook.office.com/owa 是否启用了此功能?

标签: outlook-web-addins outlook-web-app


【解决方案1】:

尚未为 OWA 实现 getAttachmentContent API。对于空结果对象 - 这是一个已知问题。它已被列入我们的积压工作。很遗憾,我们目前没有时间表可以分享。

另外,回答您第二个问题,因为您正在测试 OWA,您可以简单地转到开发人员工具并在那里放置一个断点来测试加载项并使用控制台窗口检查其中的变量数据。

【讨论】:

  • 好的,所以我找到了另一种方法 - 通过 Outlook REST API。 (例如 var getMessageUrl = Office.context.mailbox.restUrl + '/v2.0/me/messages/' + itemId + '/attachments/' + _attachmentID)。您能否在内部告诉我,使用 REST API 和 getAttachmentContentAsync() 有什么区别?两者是否仍与 Exchange 服务器通信,或者 getAttachmentContentAsync() 是否在本地获取附件内容?谢谢!
  • 对于 OWA,getAttachmentContent 还没有实现,所以现在讨论内部细节还为时过早。话虽如此,OWA 很可能会调用 Exchange Server。对于您的解决方案,请考虑您将如何处理附件内容。如果您要将附件发送到后端,则可以直接从后端进行其余调用。这个想法是 docs.microsoft.com/en-us/outlook/add-ins/…,但最好像你写的那样使用 REST(而不是 EWS)
猜你喜欢
  • 1970-01-01
  • 2023-03-27
  • 2020-10-05
  • 2021-09-11
  • 1970-01-01
  • 1970-01-01
  • 2015-03-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多