Прислушайтесь к новой почте на обмен

Я пытаюсь использовать ews-java API для подключения к своей папке входящих сообщений и прослушивания новых писем.

Кажется, я могу подключиться очень хорошо, и я копирую код из примеров на github здесь:

https://github.com/OfficeDev/ews-java-api/wiki/Getting-Started-Guide

// Subscribe to push notifications on the Inbox folder, and only listen
// to "new mail" events.
PushSubscription pushSubscription = service.SubscribeToPushNotifications(
    new FolderId[] { WellKnownFolderName.Inbox },
    new Uri("https://...") /* The endpoint of the listener. */,
    5 /* Get a status event every 5 minutes if no new events are available. */,
    null  /* watermark: null to start a new subscription. */,
    EventType.NewMail);

Однако это ошибка в затмении:

 new FolderId[] { WellKnownFolderName.Inbox },  // <---TYPE MISMATCH - CANNOT CONVERT FRM
WELLKNOWNFOLDERNAME TO FOLDERID

А также

EventType.NewMail);  // <---- NEWMAIL CANNOT BE RESOLVED OR IS NOT A FIELD

Трудно разобраться с этим, потому что я не могу найти руководство по всем методам для этой библиотеки - и пример не работает.

Полный код:

package com.geekhelp.quickstart;

import javax.swing.event.DocumentEvent.EventType;

import microsoft.exchange.webservices.data.autodiscover.IAutodiscoverRedirectionUrl;
import microsoft.exchange.webservices.data.core.ExchangeService;
import microsoft.exchange.webservices.data.core.enumeration.misc.ExchangeVersion;
import microsoft.exchange.webservices.data.core.enumeration.property.WellKnownFolderName;
import microsoft.exchange.webservices.data.core.service.item.EmailMessage;
import microsoft.exchange.webservices.data.core.service.item.Item;
import microsoft.exchange.webservices.data.credential.ExchangeCredentials;
import microsoft.exchange.webservices.data.credential.WebCredentials;
import microsoft.exchange.webservices.data.notification.PushSubscription;
import microsoft.exchange.webservices.data.property.complex.FolderId;
import microsoft.exchange.webservices.data.property.complex.MessageBody;
import microsoft.exchange.webservices.data.search.FindItemsResults;
import microsoft.exchange.webservices.data.search.ItemView;

public class App {
    public static void main(String[] args) {
        System.out.println("Running");
        ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2);
        ExchangeCredentials credentials = new WebCredentials("test@test.com0", "test");
        service.setCredentials(credentials);
        try {
            service.autodiscoverUrl("test@test.com");
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("Hello World");

        EmailMessage message;
        try {
            message = new EmailMessage(service);

            message.getToRecipients().add("test@test.com");
            message.setSubject("attachements");
            message.setBody(MessageBody.getMessageBodyFromText("Email attachements"));
            message.send();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


        // Subscribe to push notifications on the Inbox folder, and only listen
        // to "new mail" events.
        PushSubscription pushSubscription = service.SubscribeToPushNotifications(
            new FolderId[] { WellKnownFolderName.Inbox },  // <------------ TYPE MISMATCH - CANNOT CONVERT FRM
WELLKNOWNFOLDERNAME TO FOLDERID
            new java.net.URI("https://mail.test.com//EWS//Exchange.asmx") /* The endpoint of the listener. */,
            5 /* Get a status event every 5 minutes if no new events are available. */,
            null  /* watermark: null to start a new subscription. */,
            EventType.NewMail);  // <----------- NEWMAIL CANNOT BE RESOLVED OR IS NOT A FIELD
    }

Благодарю.

ОБНОВИТЬ

Спасибо, но я все еще получаю ошибку:

FolderId[] folderId = { new FolderId(WellKnownFolderName.Inbox)};
PushSubscription pushSubscription = service.subscribeToPushNotifications( folderId , service.getUrl(), 5, null, EventType.NewMail);

subscribeToPushNotifications подчеркнут красным цветом, а среда IDE сообщает:

Метод subscribeToPushNotifications(Iterable, URI, int, String, EventType...) в типе ExchangeService не применим для аргументов (FolderId[], URI, int, null, EventType)

1 ответ

Две вещи:

1) Создать FolderId от WellKnownFolderName, вы должны использовать соответствующий конструктор. Так что поменяйте:new FolderId[] { WellKnownFolderName.Inbox } чтобы:

new FolderId[] { new FolderId(WellKnownFolderName.Inbox) }

Замечания: new FolderId[] {..} только создает массив. Тогда каждый элемент в массиве должен быть FolderId типа, поэтому мы используем конструктор new FolderId(...) и передать WellKnownFolderName в качестве аргумента.

2) Вы импортируете неправильный EventType (возможно, ошибка функции автоимпорта в среде IDE),
Так что поменяйте:import javax.swing.event.DocumentEvent.EventType; чтобы:

import microsoft.exchange.webservices.data.core.enumeration.notification.EventType;

Поздний ответ, но, глядя на вашу обновленную проблему, по-видимому, массивы не считаются объектами Iterable. Списки, однако, действительно считаются Iterable объектов. Все, что вам нужно сделать, это преобразовать ваш массив в список с помощью метода Arrays.asList(), указав ваш массив в качестве параметра.

Другие вопросы по тегам