Я использую 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 "";
}
Я хочу добавить больше параметров после этого, но сейчас я хочу получить последнее письмо по каждой теме за первый день текущего месяца.