如何在Outlook的Chrome扩展程序中获取电子邮件元数据(ConversationId,类别)

时间:2019-01-11 12:40:02

标签: google-chrome-extension outlook office-js

背景:

我正在为Outlook OWA(office和live.com)构建一个Chrome扩展程序。 该扩展程序提供了有关发送给我们后端的电子邮件的一些反馈。 同样,我需要电子邮件元数据,例如ItemId,Conversation ID。 如何获得上述元数据?对于Gmail,InboxSDK提供了良好的支持,可以为我们提供所需的ThreadId。但是我不知道如何为OWA做到这一点。

我尝试了什么

我已经尝试了以下方法:

  1. 例如:https://outlook.office.com/owa/service.svc?action=FindConversation&EP=1&UA=0&ID=-4呼叫似乎可以提供数据。 尝试进行service.svc调用,但由于API调用因身份验证错误而失败,因此我无法弄清楚如何正确调用它们。

  2. 我真的希望office.js在这里有所帮助,因为我有一个插件可以通过API调用获取所需的信息。但是,即使我设法加载office.js,它也缺少“上下文”。和office.OnReady不会触发。

问题

通过利用OWA已经是Outlook客户这一事实,在chrome扩展程序中以编程方式获取当前电子邮件元数据的方法是什么。

我可以在DOM中的某个位置找到此数据,还是可以使用扩展名已提供的cookie信息对某些MS API进行API调用?

1 个答案:

答案 0 :(得分:1)

我认为有一些设计注意事项,也许有些API /功能被误解了,但仍然-您想要做的是可以实现的。

让我们从您尝试过的内容开始。 Office.js 是扩展API。它是一个特殊的JavaScript库,允许您通过那些客户端正在创建的特殊上下文与Office客户端进行通信。您基本上将其包含在网页中,然后将您的客户指向该网页,以便他们进行交流。您将不得不从商店侧面加载/或安装Office加载项。这两个选项都需要一个外接程序清单,您可以在其中定义客户端将要调用的端点。 因此,这不是一个随机的JS库,它将在没有Office上下文的情况下运行。要显示Office上下文,您必须位于Office客户端/或Office Web中,并使用具有Office.js 的Office加载项。仅仅停留在这些页面上是不够的。

对于您的#1-身份验证问题-由于未针对该API进行身份验证,因此会遇到与身份验证相关的问题。您必须注册一个应用程序,获取一个OAuth令牌,然后调用诸如Graph之类的API来获取所需的其他详细信息。

现在-我知道您只想为Web开发东西,并且想要使用Chrome扩展程序(对于GMail,可能已经存在)。我将建议一些选项,其中一个选项不包括此选项。我可以想到几种方法。

1-不要使用Chrome扩展名。

Office加载项是跨平台的,这意味着它们将与Office Web以及Office客户端一起使用。使用此工具,您将可以轻松获得所需的数据。考虑使用Office.js框架实施解决方案。但是,这需要激活该加载项,以便您收集数据(该加载项不能在后台运行)并保持激活状态。如果您的Chrome扩展程序是被动地收集数据(是否考虑了很多隐私?)或被动地提供反馈,那么这可能不是最好的选择。

2-注册一个应用程序以调用Microsoft Graph。

如果您知道要处理的电子邮件(基于发件人/主题/等),则可以在https://apps.dev.microsoft.com注册一个应用程序。如果您请求访问用户的邮箱并得到用户的授权,则可以脱机访问用户的电子邮件。这样一来,您就可以处理所需的内容,并在认为还可以的时候(通过检测域或用户打开chrome)可以通过Chrome扩展程序通知他们。可以通过几种方法来完成,但是最简单的方法就是我想像的套接字。

3-仅适用于当前邮件

所有UI查询明天可能都会失败,因为您尝试执行的操作没有记录。但是,当您查看特定项目时,URL包含一个ID。 您可以尝试注册与步骤2(添加邮件访问范围)相同的应用,并查询该ID的图表以在运行时获取它。您应该能够从Chrome扩展程序中触发该查询。就像

  1. 创建应用
  2. 当用户使用Chrome扩展程序+ Outlook-进行身份验证时提示
  3. 用户身份验证后,保存刷新令牌+访问令牌。
  4. 从URL获取商品ID。
  5. 使用访问令牌进行身份验证,然后使用项目ID调用Microsoft Graph。
  6. 商品详细信息应在json中返回。

当用户重新访问Outlook域时,可以使用刷新令牌来更新访问令牌。