- ベストアンサー
Javaメールクライアントでメールの閲覧ができないエラー
- Javaメールクライアントでメールの閲覧ができないエラーが発生しています。正しいソースコードを教えてください。
- Javaメールクライアントのプログラムでメールの閲覧ができずエラーが発生しています。ソースコードの修正方法を教えてください。
- Javaメールクライアントを使用してメールを閲覧するプログラムを作成していますが、エラーが発生してメールの閲覧ができません。解決策を教えてください。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
たぶん in を close してないのが問題だと思うので、 while のところを下のようにしたらと思います。 while (in.hasNext()) { String command = in.next(); if (command.equals("q")) { in.close(); break; } else if (command.equals("l")) { to_server.write("LIST\r\n"); to_server.flush(); } else { int number = -1; try { number = new Integer(command); } catch (Exception e) { continue; } to_server.write("RETR " + number + "\r\n"); to_server.flush(); } while (accept.hasNext()) { System.out.println(accept.nextLine()); } }
その他の回答 (5)
- MillenniuM
- ベストアンサー率58% (42/72)
もうひとつありました。 入力を確定させるために q を押したあと、 Unix 系では CTRL-D、Windows では CTRL-Z で入力終了を 確定させてみたらと思います。
- MillenniuM
- ベストアンサー率58% (42/72)
あともうひとつ、 while (true) { を while (in.hasNext()) { に変えてみてください。
- MillenniuM
- ベストアンサー率58% (42/72)
SSL なしに接続できるところがないので、実行はしてませんでした。 冒頭を public class QA8297233No1 { private static Scanner in; public static void main(String[] args) { in = new Scanner(System.in); というように in を static にするとどうですか。
- MillenniuM
- ベストアンサー率58% (42/72)
Jave 勉強中です。 朝起きたら、前回の回答が間違っていることに気づいたので。 全角の空白でインデントしてます。削除してから試してみると良いと思います。 import java.io.*; import java.net.*; import java.util.*; public class QA8297233No1 { public static void main(String[] args) { Scanner in = new Scanner(System.in); int port = 110; System.out.print("server: "); String server = in.next(); System.out.print("user: "); String user = in.next(); Console console; if ((console = System.console()) == null) { System.exit(1); } Object password_array = console.readPassword("password: "); if (password_array == null) { System.exit(1); } String password = new String((char[] )password_array); try { Socket socket = new Socket(server, port); OutputStreamWriter to_server = new OutputStreamWriter(socket.getOutputStream()); Scanner accept = new Scanner(new InputStreamReader(socket.getInputStream())); to_server.write("USER " + user + "\r\n"); to_server.flush(); to_server.write("PASS " + password + "\r\n"); to_server.flush(); while (true) { String command = in.next(); if (command.equals("q")) { break; } else if (command.equals("l")) { to_server.write("LIST\r\n"); to_server.flush(); } else { int number = -1; try { number = new Integer(command); } catch (Exception e) { continue; } to_server.write("RETR " + number + "\r\n"); to_server.flush(); } while (accept.hasNext()) { System.out.println(accept.nextLine()); } } to_server.write("QUIT\r\n"); to_server.flush(); socket.close(); } catch (Exception e) { System.err.println(e); System.exit(1); } System.exit(0); } }
- MillenniuM
- ベストアンサー率58% (42/72)
Java 勉強中です。 http://ja.wikipedia.org/wiki/Post_Office_Protocol を見ると POP3 では SSL が必須のように見えます。 SSL ソケットを使ったメールクライアントは、私に作れないので、 質問にあるものを、少し書きなおしてみました。 q で終了、l でリスト、数字でその番号のメールを読むように。 import java.io.*; import java.net.*; import java.util.*; public class QA8297233No1 { public static void main(String[] args) { Scanner in = new Scanner(System.in); int port = 110; System.out.print("server: "); String server = in.next(); System.out.print("user: "); String user = in.next(); Console console; if ((console = System.console()) == null) { System.exit(1); } Object password_array = console.readPassword("password: "); if (password_array == null) { System.exit(1); } String password = new String((char[] )password_array); try { Socket socket = new Socket(server, port); OutputStreamWriter to_server = new OutputStreamWriter(socket.getOutputStream()); Scanner accept = new Scanner(new InputStreamReader(socket.getInputStream())); to_server.write("USER " + user + "\r\n"); to_server.flush(); to_server.write("PASS " + password + "\r\n"); to_server.flush(); while (true) { String command = in.next(); if (command.equals("q")) { break; } else if (command.equals("l")) { to_server.write("LIST\r\n"); to_server.flush(); } else { int number = new Integer(command); to_server.write("RETR " + number + "\r\n"); to_server.flush(); while (accept.hasNext()) { System.out.println(accept.next()); } } } to_server.write("QUIT\r\n"); to_server.flush(); socket.close(); } catch (Exception e) { System.err.println(e); System.exit(1); } System.exit(0); } }
補足
無事に起動できたのですがメールを閲覧後、終了かリストのコマンドを打つと反応しなくてしばらくたつとdisconnected for inactivityというエラーが出てしまうのですがこれはプログラムの仕様ですか?