Java EWS API按日期搜索邮件

时间:2016-02-03 11:10:39

标签: java email exchangewebservices

我正在构建一个与EWS Java API 2.0一起使用的Web客户端邮件。

我想根据具体日期从收件箱中收到邮件。

这就是我已经拥有的:

public void foo(String dateToCompare){

        try {

            DateTime dateTime = DateTime.parse("2016-02-01T08:00:00Z");

            ItemView view = new ItemView(ServiceConst.ListLimit);


            SearchFilter searchFilter = new SearchFilter.IsGreaterThan(EmailMessageSchema.DateTimeReceived, dateTime);
            FindItemsResults<Item> itemsList = this.exchangeService.findItems(WellKnownFolderName.Inbox,searchFilter, view);

        } catch (Exception e) {
//           TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

这是我得到的错误:

请求失败。 “org.joda.time.DateTime”类型的值不能用于“Value”属性。

据我所知,joda.DateTime类对它无效,那么替代方法是什么?

2 个答案:

答案 0 :(得分:1)

发送电子邮件后,您已经具有消息的ID:

来自班级:

microsoft.exchange.webservices.data.core.service.item.EmailMessage

ExchangeService服务=新的ExchangeService(ExchangeVersion.Exchange2010_SP2);     service.setUrl(new URI(url));

ExchangeCredentials credentials = new WebCredentials(user, password, domain);
service.setCredentials(credentials);
service.setTraceEnabled(trace);


EmailMessage message = new EmailMessage(service);
message.save();
message.load();
String uniqueMessagID = message.getConversationId();
message.send();

get对话ID给出的ID像上面读取时一样等于

搜索要使用的已读电子邮件后:

microsoft.exchange.webservices.data.search.FindItemsResults<Item>
microsoft.exchange.webservices.data.core.service.item.Item
microsoft.exchange.webservices.data.core.PropertySet
microsoft.exchange.webservices.data.core.enumeration.property.BasePropertySet
microsoft.exchange.webservices.data.core.ExchangeService
microsoft.exchange.webservices.data.core.service.item.EmailMessage

        ItemView view = new ItemView(numberOfItemResult);
        view.getOrderBy().add(ItemSchema.DateTimeReceived, SortDirection.Ascending);
        view.setPropertySet(new PropertySet(BasePropertySet.IdOnly, ItemSchema.Subject, ItemSchema.DateTimeReceived));

        FindItemsResults<Item> findResults = service.findItems(WellKnownFolderName.Inbox, new SearchFilter.SearchFilterCollection(LogicalOperator.And, new SearchFilter.ContainsSubstring(ItemSchema.Subject, "")), view);

        if (findResults != null) {

            PropertySet itempropertyset = new PropertySet(BasePropertySet.FirstClassProperties);
            itempropertyset.setRequestedBodyType(BodyType.Text);

            for (Item item : findResults) {
                if (item instanceof EmailMessage) {
                    item.load(itempropertyset);
                    EmailMessage emailMessage = ((EmailMessage) item);
                    emailMessage.getConversationId().getUniqueId();
                }

            }
        }

答案 1 :(得分:0)

你必须使用java.util.Date类,而不是joda.DateTime类。

以下是您想要的search based on received time示例