Note:这一特殊问题对我们的客户产生重大影响,这会转化为巨大的业务影响,对收入产生直接影响。
TL;DR.
当用户在撰写电子邮件草稿时与我们的加载项交互时,我们的 Outlook Office 加载项如何最大限度地缩短电子邮件草稿发送之前所需的时间?EWS 获取项目 API将返回 OK 响应itemId
我们收到来自Office.context.mailbox.item.saveAsync()
?
If事实证明,我们的加载项无法控制该项目何时被持久化到 EWS,那么最终用户可以采取什么措施来加快速度?
我们正在寻找 (a) 技术解决方案,或 (b) 消息来指导我们的客户如何缓解/修复/解决此问题。
最终用户影响
我们的一些客户无法使用 Outlook 的 Office 加载项发送电子邮件,或者必须等待很长时间(> 2 分钟)才能发送电子邮件。
Our Goal
我们希望所有客户都能够使用我们的加载项发送电子邮件,而不必等待不合理的时间。
附加背景
根据我们的日志和客户报告,此问题仅存在于Outlook 2016 Windows 版桌面应用程序。我们没有证据表明任何其他版本的 Outlook(包括 Outlook 2013 或 Outlook for Mac)中都存在此问题,但这些客户端中也可能存在此问题。
我们的插件概述
我们的插件集成了Compose模式在创作时提供附加功能电子邮件消息,例如模板、后续、打开和点击跟踪以及日程安排。
我们的插件与我们的 SaaS 产品协同工作,如下所示:
我们的加载项在电子邮件上设置 EWS 扩展属性,并使用指示该邮件启用了哪些功能的元数据。
我们的带外 SaaS 产品配置为通过 EWS API 从客户的邮箱中读取。当它遇到我们的 Office 加载项编写的 EWS 扩展属性时,它会触发代码路径以满足所需的行为。
根本原因分析
我们问题的根本原因是我们在 Outlook 2016 for Windows 中与 EWS 的交互。为了成功与 EWS 交互以读取/写入邮箱项目,它必须了解该项目。
的文档Office.context.mailbox.item.saveAsync() https://dev.office.com/reference/add-ins/outlook/1.5/Office.context.mailbox.item?product=outlook#saveasyncoptions-callback says:
在 Outlook Web App 或在线模式下的 Outlook 中,项目将保存到服务器。在 Outlook 的缓存模式中,项目将保存到本地缓存。
它进一步说:
Note:如果您的加载项调用saveAsync
在撰写模式下的项目上以获得itemId
要与 EWS 或 REST API 一起使用,请注意,当 Outlook 处于缓存模式时,可能需要一些时间才能将项目实际同步到服务器。直到项目同步为止,使用itemId
将返回一个错误。
因此,我们得出的结论是Office.context.mailbox.item.saveAsync()
,虽然它确实返回一个最终有效 itemId
,不保证任何后续 EWS 交互都会成功。到目前为止,我们还没有找到任何方法来加速 Outlook 客户端实际使 EWS 识别邮箱项目的过程。
减轻
我们试图通过以下方式缓解这个问题polling EWS 获取项目 https://msdn.microsoft.com/en-us/library/office/aa565934(v=exchg.150).aspx试图获得ChangeKey
对于带有itemId
我们收到来自Office.context.mailbox.item.saveAsync()
。虽然我们已经看到这最终会成功,但可能需要一分钟或更长时间才能发生。对于我们的客户来说,等待的时间实在是太长了。
了解“在线模式”与“缓存模式”
如果 Outlook 2016 for Windows 桌面客户端处于“缓存模式”,用户可以执行以下操作:
- …知道客户端是处于“缓存模式”还是“在线模式”?
- …试图强制客户端进入“在线模式”?