web-dev-qa-db-ja.com

JavaのIMAPクライアント:JavaMail APIまたはApache Commons Net?

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));

しかし、純粋な文字列出力ではなく、フォルダインスタンスとしてフォルダのリストを取得するにはどうすればよいですか?

23
superuser000001

短編:実際の要件によって異なります。

クライアントが主にメールの送信と読み取りに集中している場合JavaMail APIは事実上の標準の高レベルAPIであり、メールの作成、ヘッダーや添付ファイルの追加がはるかに簡単になります。

一方、IMAPプロトコルのすべての可能性を提供するつもりである場合、低レベルApache Commons Netライブラリは、より詳細な操作を可能にしますが、単純な操作のボイラープレートコードは増えます。

この回答を完了するためだけに、Apache Commons Emailを忘れないでください。これは、プロジェクトの home page によるとJava Mail API、それは単純化を目的としていますの上に構築されています。これはCommons NetよりもJavaMailに非常に近いです。

自分が何をしたいかをもっと知らなければ、より正確な答えを出すのは難しいです...

18
Serge Ballesta

純粋な文字列出力の代わりにフォルダーインスタンスとしてフォルダーのリストを取得するにはどうすればよいですか?

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();
3

Gmailから未読メールを取得する-JavaMail API + IMAP を見ることを検討してください

これはJavaMail APIを使用してコード化されていますが、私の意見では、これはApache commonsライブラリよりもはるかに単純なインターフェースを持っています。

本当にApache commonsライブラリを使用したい場合は、javadocsを見て、.select()に渡すことができる他のパラメーターを確認してください。

3
Fallso

私が最近チェックした最新の代替案があります:

  1. Yahoo IMAPクライアント :asyncをサポートIO using Java Futuresですが、低レベルであり、チェックなどの単純な使用例には複雑すぎる可能性があります新着メール用。
  2. Email4J :使いやすい高レベルAPI Javaメールの下にありますが、Mavenセントラルにはまだありません。大規模なPRがまだ開いています(私はフォークを使用して)

ローカルテストでは、軽量の docker-imap-devel Dockerイメージを使用しています。

IMAPプロトコルの舞台裏(デバッグに役立つ)の良い紹介は IMAP 101:手動IMAPセッション にあります。

更新:結局のところ、古き良き javax.mail.imap APIFolder.open()はそのままで機能し、以前に確認する必要がありました...提供されたIdleManagerを使用して新しいメッセージのメールボックスを監視するために使用できる実験的なExecutorServiceもあります。

3
Gregor