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. 明日以降の行数を取得する方法は?
- 4. Api Instagram、任意のメディアの新しいコメントを取得する(パラメータの日付またはID以降)
- 5. Javaの日付の平日の略号を取得します
- 6. IMAP添付ファイル取得コマンド
- 7. PHPはimap添付ファイルのファイルサイズを取得します
- 8. PHPは、以降の月の特定の日を取得するために今日を使用します
- 9. Androidは2日間の日数を取得します。アンドロイド6.0以降の別の値を返す
- 10. 日付と時刻に基づいてIMAPメールを取得しますか?
- 11. Juliaで2038年以降の日付を使用するには?
- 12. iPhone Appは、iOS 4.0以降でランダムクラッシュを取得します。
- 13. 特定の日付以降に日付基準が機能しない
- 14. SQLクエリでBETWEENを使用して00:00:00以降の日付からレコードを取得する
- 15. 日付値の1970年以降の経過秒数を取得する方法は?
- 16. IMAPコマンドを使用したメッセージのサイズの取得
- 17. Cassandra 3.0以降ではJava 8u40以降が必要です
- 18. DBからJavaの完全な日付を取得します
- 19. 固定のミリ秒桁のjava.time ISOの日付書式(Java 8以降)
- 20. dropbox_uploader.shで特定の日付以降にファイルを削除する
- 21. 2014年以降の日付を返す問題
- 22. Oracle:特定の日付以降にレコードを更新する
- 23. 特定の日付以降に電子メールを送信する
- 24. IMAPからの返信のみを取得するメッセージ
- 25. 日付フィルタ付きのIMAP検索コマンド
- 26. SOAPメッセージを取得し、Java
- 27. 今日以降のMouseOverはJqueryのFullCalendar
- 28. libgit2sharpは最後のプッシュ以降すべてのコミットを取得します
- 29. Javaは2つの日付と時刻を取得して比較します
- 30. Gmail IMAPを使用して返信されたメッセージを取得するには?
関連:http://stackoverflow.com/questions/6963256/javamail-search-by-receiveddate-doesnt-work-down-to-第二に – kevinarpe