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

时间:2012-11-18 13:30:49

标签: 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());
            }
        }

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

1 个答案:

答案 0 :(得分:1)

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

需要将此作为thrid参数传递给方法subscribeToPullNotifications()

否则你可以通过将其置于循环中来持续提供相同的服务:

 while (true) {

    GetEventsResults events = null;

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

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

 }

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