7

我正在尝试使用 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());
            }
        }

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

4

1 回答 1

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...
    }

 }

但这会不断地从服务器增加的负载中拉出来,所以宁愿使用第一种方法,定期订阅,并在请求中传递先前的水印。

于 2013-12-17T07:59:31.267 回答