java imap从日期开始获取消息

时间:2009-05-15 17:52:37

标签: java email imap

我正在使用javax.mail包编写/学习使用java从IMAP文件夹中获取电子邮件。我成功地能够检索文件夹中的最后n条消息,但是我希望构建一个示例来检索自指定日期以来的消息。任何例子?

5 个答案:

答案 0 :(得分:22)

您也可以在java邮件包中使用SearchTerm类。

SearchTerm olderThan = new ReceivedDateTerm(ComparisonTerm.LT, someFutureDate);
SearchTerm newerThan = new ReceivedDateTerm(ComparisonTerm.GT, somePastDate);
SearchTerm andTerm = new AndTerm(olderThan, newerThan);
inbox.search(andTerm);

上述某些组合应该证明是将日期保持在一定范围内的更好方法。

答案 1 :(得分:5)

public class CheckDate  {
    public void myCheckDate(Date givenDate) {
        SearchTerm st = new ReceivedDateTerm(ComparisonTerm.EQ,givenDate);

        Message[] messages = inbox.search(st);
    }

    // in main method

    public static void main(String[] args) throws ParseException{
        SimpleDateFormat df1 = new SimpleDateFormat( "MM/dd/yy" );
        String dt="06/23/10";
        java.util.Date dDate = df1.parse(dt);
        cd.myCheckDate(dDate);
    }
}

答案 2 :(得分:2)

您应该尝试利用服务器端搜索,而不是获取所有邮件。 这可以通过使用 javax.mail.Folder 搜索方法来实现。您可能必须根据Message.getReceivedDate()上的条件编写自己的SearchTerm。

如果服务器端搜索不起作用,您可以尝试使用获取配置文件,即使用inbox.fetch(Message [] msgs,FetchProfile fp)而不是inbox.getMessages()。 fetch的javadoc说:客户端使用此方法指示对于给定的消息范围,需要集中指定项目。期望实现以有效的方式检索给定消息范围的这些项。请注意,此方法只是提示预取所需项目的实现。

答案 3 :(得分:0)

这是我想出的。这对我有用,但可能不是最好的方法。有什么建议可以改善这个吗?

      Date from; //assume initialized
      Store store; //assume initialized
      Folder inbox = store.getFolder("INBOX");
      inbox.open(Folder.READ_ONLY);
      int end = inbox.getMessageCount();
      long lFrom = from.getTime();
      Date rDate;
      long lrDate;
      int start = end;
      do {
        start = start - 10;
        Message testMsg = inbox.getMessage(start);
        rDate = testMsg.getReceivedDate();
        lrDate = rDate.getTime();
      } while (lrDate > lFrom);
      Message msg[] = inbox.getMessages(start, end);
      for (int i=0, n=msg.length; i<n; i++) {
        lrDate = msg[i].getReceivedDate().getTime();
        if (lrDate > lFrom) {
          System.out.println(i + ": "
            + msg[i].getFrom()[0]
            + "\t" + msg[i].getSubject());
        }
      }

答案 4 :(得分:0)

上个月的所有邮件:

    Calendar cal = Calendar.getInstance();
    cal.roll(Calendar.MONTH, false);
    Message[] search = folder.search(new ReceivedDateTerm(ComparisonTerm.GT, cal.getTime()));