java ews服务无法与多个搜索过滤器一起使用

问题描述 投票:0回答:1

我正在使用ews Exchange Service将电子邮件从收件箱复制到数据库中的某些位置。但是我正在使用两个搜索过滤器DateTimeReceivedSubject样本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 "";
}

我想在此之后添加更多参数,但现在我想从当月的第一天检索每个主题的最后一封电子邮件。

java oracle web-services exchangewebservices
1个回答
0
投票

输入

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

日期应为键入对象而不是字符串,这就是为什么错误告诉您“指定的值对属性无效”的原因。

如果您使用QueryString而不是SearchFilter https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/querystring-querystringtype,则可以使用纯文本,这对于这种类型的查询可能会更有效

© www.soinside.com 2019 - 2024. All rights reserved.