JavaでIMAPクライアントを実装する必要があります。
Apache Commons Netライブラリを使用する利点は何ですか?それは実装を堅牢でより柔軟にしますか?
戻り値を処理する方法を教えてください。常に文字列が生成されます。
例えば:
public static void main(String[] args) throws Exception {
IMAPClient client = new IMAPClient();
client.connect(SERVER);
client.login(USERNAME, PASSWORD);
client.select("INBOX");
client.fetch("1", "body[header]");
}
そして出力を文字列に送ることができます
client.addProtocolCommandListener(new PrintCommandListener(System.out, true));
しかし、純粋な文字列出力ではなく、フォルダインスタンスとしてフォルダのリストを取得するにはどうすればよいですか?
短編:実際の要件によって異なります。
クライアントが主にメールの送信と読み取りに集中している場合、JavaMail APIは事実上の標準の高レベルAPIであり、メールの作成、ヘッダーや添付ファイルの追加がはるかに簡単になります。
一方、IMAPプロトコルのすべての可能性を提供するつもりである場合、低レベルApache Commons Netライブラリは、より詳細な操作を可能にしますが、単純な操作のボイラープレートコードは増えます。
この回答を完了するためだけに、Apache Commons Emailを忘れないでください。これは、プロジェクトの home page によるとJava Mail API、それは単純化を目的としていますの上に構築されています。これはCommons NetよりもJavaMailに非常に近いです。
自分が何をしたいかをもっと知らなければ、より正確な答えを出すのは難しいです...
純粋な文字列出力の代わりにフォルダーインスタンスとしてフォルダーのリストを取得するにはどうすればよいですか?
Apache IMAPClientはIMAPプロトコルの低レベルのラッパーであるように見えるため、文字列よりも優れたものは何も提供されていません。より高レベルのAPIの場合、 JavaMail ライブラリを調べることができます。
Session session = Session.getDefaultInstance(System.getProperties(),null);
Store store = session.getStore("imaps");
store.connect(this.Host, this.userName, this.password);
// Get default folder
Folder folder = store.getDefaultFolder();
// Get any folder by name
Folder[] folderList = folder.list();
Gmailから未読メールを取得する-JavaMail API + IMAP を見ることを検討してください
これはJavaMail APIを使用してコード化されていますが、私の意見では、これはApache commonsライブラリよりもはるかに単純なインターフェースを持っています。
本当にApache commonsライブラリを使用したい場合は、javadocsを見て、.select()
に渡すことができる他のパラメーターを確認してください。
私が最近チェックした最新の代替案があります:
ローカルテストでは、軽量の docker-imap-devel Dockerイメージを使用しています。
IMAPプロトコルの舞台裏(デバッグに役立つ)の良い紹介は IMAP 101:手動IMAPセッション にあります。
更新:結局のところ、古き良き javax.mail.imap API とFolder.open()
はそのままで機能し、以前に確認する必要がありました...提供されたIdleManager
を使用して新しいメッセージのメールボックスを監視するために使用できる実験的なExecutorService
もあります。