subscribeToPullNotifications未检测到收件箱中的新电子邮件

Mah*_*leh 7 exchangewebservices ewsjavaapi

我正在尝试使用subscribeToPullNotifications检测收件箱中的新电子邮件,如下所示:

PullSubscription subscription = service.subscribeToPullNotifications(
                folder, 1, null, EventType.NewMail);

        GetEventsResults events = subscription.getEvents();
        System.out.println("####### EVENTS: "
                + events.getItemEvents().toString());
        for (ItemEvent itemEvent : events.getItemEvents()) {
            if (itemEvent.getEventType() == EventType.NewMail) {
                EmailMessage message = EmailMessage.bind(service,
                        itemEvent.getItemId());
                System.out.println("######## NEW EMAIL MESSAGE IS: "
                        + message.getSubject());
            }
        }
Run Code Online (Sandbox Code Playgroud)

events.getItemEvents()总是空的,即使我可以在收件箱中看到新的电子邮件.还有如何在应用程序运行时始终重复上述代码,以便每分钟检查一次新的电子邮件.

小智 2

这里取决于您何时调用它,如果假设您将其作为特定间隔调用,那么您需要在新请求中传递先前响应的“WaterMark”,否则其间发生的所有事件都将丢失。 方法:subscription.getWaterMark()

需要将其作为第三个参数传递给方法 subscribeToPullNotifications()

否则,您可以通过将其放入循环中来持续拉动同一服务:

 while (true) {

    GetEventsResults events = null;

    try {
         events = subscription.getEvents();
    } catch (Exception e1) {
         e1.printStackTrace();
    }

    for (ItemEvent itemEvent : events.getItemEvents()) {
        // do something...
    }

 }
Run Code Online (Sandbox Code Playgroud)

但这会不断地从服务器增加负载,因此最好使用第一种方法,定期订阅,并在请求中传递先前的水印。