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のsearchメソッドを使用して機能します。おそらく、Message.getReceivedDate() の条件に基づいて、独自の SearchTerm を作成する必要があります。

サーバー側の検索が機能しない場合は、フェッチ プロファイルを使用してみてください。つまり、inbox.getMessages() の代わりに inbox.fetch(Message[] msgs, FetchProfile fp) を使用してください。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 に答える