我正在使用 Java EWS API 将我的应用程序连接到 MS Exchange 并读取用户电子邮件请求。然后通过系统工作流程处理这些请求。一天内的电子邮件数量限制为 50 封,因此整体数量较少。但是,我正在寻找一种有效且可靠的机制来使用 EWS API 从交换服务器中读取数据。另请注意,处理完电子邮件后,我们会将其移至子文件夹,因此收件箱仅包含未处理的请求
目前据我了解,以下方案用于连接到 Exchange 服务器并对邮箱执行各种操作。
轮询 - 使用标准 Exchange 服务接口连接到 Exchange;查找所有新电子邮件并按顺序处理它们。客户端可以更好地控制读取和移动到已处理文件夹之间的故障和同步。不利的一面是,体验不是实时的,即使没有任何活动,也会建立联系以进行交换。
拉取通知 - 此方法与前一种方法几乎相同,使用间隔订阅拉取通知,并在计时器事件发生时从收件箱中读取电子邮件。优点和缺点与方法 1 类似。
推送通知 - 客户端订阅交换服务器以通过将自己注册到特定事件并定义回调机制(客户端 Web 服务)来接收通知来接收推送通知。从好的方面来说,通知几乎是实时的,并且只有在有事件时才会建立连接。不利的一面是,我看到订阅和水印需要在客户端进行管理,以免事件丢失。不确定这是否仍然是一种可靠的方法,因为在建立订阅之前已经在收件箱中的消息会发生什么情况;服务器启动时会重播这些事件吗?目前还不清楚。
流式订阅 - 客户端建立流式连接,然后与服务器保持打开状态最多 30 分钟,在此期间交换将通知任何已注册的事件。一旦连接断开,就有能力恢复它,以便订阅保持活动状态。在我开始听到同步文件夹项目和保持同步状态的额外步骤之前,这似乎是最好的方法;需要定期进行,以便不会错过连接/断开连接的事件。
看看我的需求(可靠地从交换服务器读取电子邮件)和各种选项的分析,我觉得方法 1 简单且更可靠,因为它可以更好地控制整个过程。但同时如果我对框架在优缺点方面的理解是错误的,我想和其他熟悉 API 的人一起来纠正我。
我愿意接受该小组的任何建议,以使其变得更好,因为其目的是不错过任何电子邮件。