javax.mail packageを使用しているIMAPフォルダからjavaを使用して電子メールを取得するよう書いています。私は正常にフォルダ内の最後のn個のメッセージを取得することができましたが、指定された日付以降にメッセージを取得するための例を構築しようとしています。どんな例?java imapは日付以降のメッセージを取得します
答えて
また、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);
上記のいくつかの組み合わせは、特定の範囲内で日付を取得するより良い方法であることがわかります。
receivedDateTermを使用しようとしていますが、正しい結果が返ってこないようです。私はちょうど私のテストが始まった時から受け取った最後の1分またはすべてのメールで受け取ったすべてのメールを検索したいと思います。それは期待どおりに動作していない..これは私がやっているものです。 'SearchTerm st = new AndTerm(新しいSubjectTerm(subjectSearchPhrase)、新しいBodyTerm(bodySearchPhrases));st = new AndTerm(st、new ReceivedDateTerm(ComparisonTerm.GE、searchMailReceivedDateGE)); '私はYoungerTerm(80)を使ってみましたが、これもうまくいきません。誰もが問題を知っていますか?ありがとう! – OverrockSTAR
注意すべきこと:IMAPは時刻ではなく日付のみで検索できるため、最後の更新以降に新しいメールをすべて取得したい場合は、比較日の時刻を真夜中に戻し、さらに確認する必要がありますクライアント上で重複します。 – Tobl
これは私が思いついたものです。これは私のために働くが、おそらくそれについて行く最善の方法ではない。これを改善するための提案はありますか?
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());
}
}
IMAP機能でメールをフィルタリングせずに電子メールを最初に取得するので、良いアプローチではありません。私は10倍の増分ではそれほど良いものにはならないと信じています(ボックスに10kのメールを想像してください) – Konstantin
すべてのメッセージを取得する代わりに、サーバー側の検索を利用するようにしてください。 検索メソッドjavax.mail.Folderを使用して動作します。おそらく、Message.getReceivedDate()の基準に基づいて独自のSearchTermを作成する必要があります。
サーバー側の検索が機能しない場合は、inbox.getMessages()の代わりにinbox.fetch(Message [] msgs、FetchProfile fp)を使用すると、フェッチプロファイルを使用できます。 fetchのためのjavadocのメッセージ:クライアントはこのメソッドを使用して、指定された項目が指定されたメッセージ範囲に対してen-masseする必要があることを示します。実装は、指定されたメッセージ範囲に対してこれらの項目を効率的に検索することが期待されます。このメソッドは、目的の項目をプリフェッチするための実装のヒントに過ぎないことに注意してください。
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);
}
}
先月のすべてのメール:
Calendar cal = Calendar.getInstance();
cal.roll(Calendar.MONTH, false);
Message[] search = folder.search(new ReceivedDateTerm(ComparisonTerm.GT, cal.getTime()));
- 1. Http LiveストリーミングAndroid 3.0以降で現在の日付を取得
- 2. 明日以降の行数を取得する方法は?
- 3. Javaの日付の平日の略号を取得します
- 4. PHPは、以降の月の特定の日を取得するために今日を使用します
- 5. IMAP添付ファイル取得コマンド
- 6. PHPはimap添付ファイルのファイルサイズを取得します
- 7. 日付と時刻に基づいてIMAPメールを取得しますか?
- 8. iPhone Appは、iOS 4.0以降でランダムクラッシュを取得します。
- 9. 日付値の1970年以降の経過秒数を取得する方法は?
- 10. 2014年以降の日付を返す問題
- 11. 固定のミリ秒桁のjava.time ISOの日付書式(Java 8以降)
- 12. Cassandra 3.0以降ではJava 8u40以降が必要です
- 13. 今日以降のMouseOverはJqueryのFullCalendar
- 14. IMAPからの返信のみを取得するメッセージ
- 15. Javaは2つの日付と時刻を取得して比較します
- 16. Gmail IMAPを使用して返信されたメッセージを取得するには?
- 17. javaの2つの日付間の日数を取得する方法は?
- 18. エポック以降のJoda-Time日数
- 19. 日付から日付までsqlのデータを取得
- 20. Python IMAPは日付の前にメールを受信しています。また、UNSEEN
- 21. CSVからインポートする日付を取得する日付を取得する
- 22. 明日の日付を取得
- 23. PyQtはユーザからの日付を取得します
- 24. mysqlは特定の日付に状態を取得します
- 25. 別の日付オブジェクトから(6ヶ月前)日付オブジェクトを取得します
- 26. Javaでフォーマットされた日付を取得したい
- 27. は2日以内の日付です
- 28. IMAPメッセージから添付ファイルを抽出する方法は?
- 29. javax.mail.Message指定された日付範囲のメッセージを取得しようとしています
- 30. PHP IMAPはサーバからUNSEENのメールを取得します
関連:http://stackoverflow.com/questions/6963256/javamail-search-by-receiveddate-doesnt-work-down-to-第二に – kevinarpe