質問
私はのjavax.mailパッケージを使用してIMAPフォルダからJavaを使用して電子メールを取得するために学ぶ/書いています。しかし私は、私が指定した日付以降にメッセージを取得する例を構築するために探しています、成功したフォルダ内の最後のn個のメッセージを取得することができました。任意の例?
解決
また、Javaのメールパッケージの検索語のクラスを使用することができます。
SearchTerm olderThan = new ReceivedDateTerm(ComparisonTerm.LT, someFutureDate);
SearchTerm newerThan = new ReceivedDateTerm(ComparisonTerm.GT, somePastDate);
SearchTerm andTerm = new AndTerm(olderThan, newerThan);
inbox.search(andTerm);
上記のいくつかの組み合わせが一定の範囲内の日付を取得するためのより良い方法であることを証明する必要があります。
他のヒント
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);
}
}
の代わりにすべてのメッセージをフェッチするのは、サーバー側検索を利用してみてください。 これは、の検索のjavax.mail.Folderのののの方法を使用して動作します。おそらく)Message.getReceivedDate(上の基準に基づいて、独自の検索語を記述する必要があります。
サーバー側の検索が動作しない場合は、、あなたは)フェッチプロファイル、すなわち、代わりのinbox.getMessagesを(使用して試みることができるinbox.fetch(メッセージ[] MSGの、のFetchProfile FP)を使用します。 フェッチのjavadocは言う:のクライアントは、指定されたアイテムがアン・マッセ与えられたメッセージ範囲のため必要とされていることを示すために、このメソッドを使用します。実装は、効率的な方法で指定されたメッセージの範囲のためにこれらのアイテムを取得することが期待されます。この方法は、目的のアイテムをプリフェッチする実装にだけヒントであることに注意してください。の
ここに私が思い付いたものです。これはそれについて移動するための最良の方法を私のために動作しますが、おそらくありません。これを改善するための任意の提案ですか?
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());
}
}
先月のすべてのメールます:
Calendar cal = Calendar.getInstance();
cal.roll(Calendar.MONTH, false);
Message[] search = folder.search(new ReceivedDateTerm(ComparisonTerm.GT, cal.getTime()));