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()

これを 3 番目の引数としてメソッド subscribeToPullNotifications() に渡す必要があります。

それ以外の場合は、 loop に配置することで、同じサービスを継続的にプルできます。

 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 に答える