IMAPでメールを取得するにはFETCHコマンドを使用しますが、FETCHでメール本文を取得すると、何もしないと未読フラグが解除されてしまいます。未読のまま取得するには、FETCHコマンドのPEEKオプションを追加します。
[失敗例] 1番のメールの本文を取得
tag1 FETCH 1 BODY[TEXT]
...
tag2 FETCH 1 FLAGS
tag2 1 FETCH (FLAGS (\Seen)) <- 既読になってしまう
[修正例] 未読フラグを維持したまま、1番のメールの本文を取得
tag1 FETCH 1 BODY.PEEK[TEXT] <- ".PEEK" を追加
...
tag2 FETCH 1 FLAGS
tag2 1 FETCH (FLAGS ())
javamailの場合は、IMAPMessage#setPeekメソッドを使用します。
Message message = folder.getMessageByUID(uid);
if (message instanceof IMAPMessage) {
((IMAPMessage) message).setPeek(true);
}