我正在尝试使用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()
始终为空,即使我可以在收件箱中看到新的电子邮件。
还有如何在应用程序运行时始终重复上述代码,以便每分钟检查一次新的电子邮件。
答案 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...
}
}
但是这会不断地从服务器增加负载,因此请使用第一种方法定期订阅,并在请求中传递先前的水印。