ヘッダだけのチェックとあなたが知られているに達した(最後の既知)、救済:
を例えば(私は今日の余分な素敵な感じ)、それは、実際の生産コード(いくつかの部分がカットされたから除きますそれがコンパイルされない可能性があり、いくつかができれ設定されているstate.processedのLinkedHashMapサロゲート[キーセットは()](およびいくつかの最大境界ブーリアンremoveEldestEntry /()w)のSEENフラグに
try {
store = mailSession.getStore("imap");
try {
store.connect();
Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_ONLY);
int count = folder.getMessageCount();
for(int localProc=0, chunk=49;localProc<10 && count>0; count -=chunk+1){
Message messages[] = folder.getMessages(Math.max(count-chunk, 1), count);
FetchProfile fp = new FetchProfile();
fp.add(FetchProfile.Item.ENVELOPE);
fp.add("Message-ID");
//add more headers, if need be
folder.fetch(messages,fp);
for (int i=messages.length;--i>=0;) {
//can check abort request here
Message message = messages[i];
String msgId = getHeader(message,"Message-ID");
if (msgId!=null && !state.processed.add(msgId)){
if (++localProc>=10){
break;
}
continue;
}
///process here, catch exception, etc..
}
}
folder.close(false);
} catch (MessagingException e) {
logger.log(Level.SEVERE, "Mail messaging exception", e);
}
} catch (NoSuchProviderException e) {
logger.log(Level.SEVERE, "No mail provider", e);
}
if(store != null) {
try {
store.close();
} catch (MessagingException e) {}
}
UIDが時間の経過とともに変更されるため、解決策ではありません。そのため、ダウンロードした電子メールを追跡するためにMessage-IDを使用しています。 – telebog
私はgetUID(メッセージメッセージ)メソッドを理解しているので、サーバーからの特定のメッセージの実際のMessageUIDを取得できます。したがって、最後に取得したメッセージの実際のUIDを取得し、getUIDNext()メソッドとgetMessagesByUID()メソッドを使用して最後のメッセージを探し、指定された範囲をダウンロードすることが可能です。 – Erik
メッセージUIDは、メッセージをあるフォルダ(またはIMAP用語では「メールボックス」)から別のフォルダに移動すると変更されます。 ["ユニークな識別子はメールボックスで厳密に昇順に割り当てられ、各メッセージはメールボックスに追加されるため、以前に追加されたメッセージよりも高いUIDが割り当てられます。"](http://tools.ietf .org/html/rfc3501#section-2.3.1.1)telebogは、どのフォルダにあるかにかかわらず、各メッセージを正確に1回だけダウンロードしたいようです。 – dkarp