10

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

4

5 回答 5

26

您还可以使用 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);

以上的一些组合应该被证明是在一定范围内获取日期的更好方法。

于 2009-05-15T20:11:35.920 回答
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);
    }
}
于 2010-06-24T06:37:40.900 回答
2

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

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

于 2009-05-15T19:39:19.167 回答
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());
        }
      }
于 2009-05-15T18:24:40.607 回答
0

上个月的所有邮件:

    Calendar cal = Calendar.getInstance();
    cal.roll(Calendar.MONTH, false);
    Message[] search = folder.search(new ReceivedDateTerm(ComparisonTerm.GT, cal.getTime()));
于 2015-09-01T04:55:41.170 回答