java служба ews не может работать с несколькими поисковыми фильтрами - PullRequest
0 голосов
/ 26 февраля 2020

Я использую ews Exchange Service для репликации писем из папки «Входящие» в базу данных. Однако я использую два фильтра поиска DateTimeReceived и Subject sampel cdoe, как показано ниже

    SearchFilter.SearchFilterCollection search = new SearchFilter.SearchFilterCollection();
    search.add(new SearchFilter.IsGreaterThanOrEqualTo(ItemSchema.DateTimeReceived, "02/01/2020"));
    search.add(new SearchFilter.ContainsSubstring(ItemSchema.Subject,custno));

Как только я запускаю код, я обнаружил ниже ошибку

microsoft.exchange.webservices.data.core.exception.service.remote.ServiceResponseException: The specified value is invalid for property.

Вот полный Код

public static String readmailbody(String custno, String user, String pwd, String domain) {

    try {
        //Connection conn = DriverManager.getConnection("jdbc:default:connection:");
        Connection conn = DriverManager.getConnection("jdbc:oracle:thin:user/pass@host:port:sid");

        ExchangeService service = new ExchangeService();
        ExchangeCredentials credentials = new WebCredentials(user, pwd, domain);
        service.setCredentials(credentials);
        service.setUrl(new URI("https://host.domain.com/ews/Exchange.asmx"));
        ItemView view = new ItemView(1);



        view.getOrderBy().add(ItemSchema.DateTimeReceived, SortDirection.Descending);
        view.setPropertySet(new PropertySet(BasePropertySet.IdOnly, ItemSchema.Subject,ItemSchema.DateTimeReceived));
        //SearchFilter sfs = new SearchFilter.IsGreaterThanOrEqualTo(ItemSchema.DateTimeReceived,DateTime.now().dayOfMonth().toString());
        //SearchFilter cust = new SearchFilter.ContainsSubstring(ItemSchema.Subject,custno);

        SearchFilter.SearchFilterCollection search = new SearchFilter.SearchFilterCollection();

        search.add(new SearchFilter.IsGreaterThanOrEqualTo(ItemSchema.DateTimeReceived, "02/01/2020"));
        search.add(new SearchFilter.ContainsSubstring(ItemSchema.Subject,custno));

        FindItemsResults<Item> findResults = service.findItems(WellKnownFolderName.Inbox,search,view);


        String senderEmail = "";
        String mailto = "";
        StringBuilder emailbody=new StringBuilder();

        for (Item item : findResults.getItems()) {
            item.load();

            if (item instanceof EmailMessage) {
                senderEmail = "<b>From : </b>" + ((EmailMessage) item).getSender().getAddress();                  
                mailto = "<b>To : </b>" + ((EmailMessage) item).getDisplayTo();                   
            }

            String mailcc = "<b>CC : </b>" + item.getDisplayCc();
            String subject = "<b>Subject : </b>" + item.getSubject();
            String sentdate =  "<b>Sent : </b>" + item.getDateTimeSent().toString();
            emailbody.append(senderEmail + "<br>" + sentdate + "<br>" + mailto + "<br>" + mailcc + "<br>" + subject + "<br>" + MessageBody.getStringFromMessageBody(item.getBody()));


            String proc = "call xx_ews_exchange(?,?,?,?,?,?)";

            CallableStatement pstmt = conn.prepareCall(proc);
            pstmt.setString(1, senderEmail);
            pstmt.setString(2, mailto);
            pstmt.setString(3, mailcc);
            pstmt.setString(4, subject);
            pstmt.setString(5, emailbody.toString());
            pstmt.setString(6, custno);
            pstmt.executeUpdate();
            pstmt.close();

            System.out.println(emailbody.toString());

            return "Success";

        }
            System.gc();
    } catch (SQLException sqle) {
        return "SQLException " + convertException(sqle);
    } catch (ServiceLocalException sle) {
        return "ServiceLocalException " + convertException(sle);
    } catch (URISyntaxException urise) {
        return "URISyntaxException " + convertException(urise);
    } catch (Exception e) {
        return "Other Exception " + convertException(e);
    }
    return "";
}

Я хочу добавить больше параметров после этого, но сейчас я хочу получить последнее письмо по каждой теме за первый день текущего месяца.

1 Ответ

0 голосов
/ 27 февраля 2020

In

 search.add(new SearchFilter.IsGreaterThanOrEqualTo(ItemSchema.DateTimeReceived, "02/01/2020"));

Объект Date должен быть напечатан, а не String, поэтому ошибка говорит вам, что «указанное значение недопустимо для свойства».

Вы можете использовать обычный текст, если вы используете QueryString вместо SearchFilter https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/querystring-querystringtype, это, вероятно, будет более эффективным для этого типа запроса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...