• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:javaのメールクライアント)

Javaメールクライアントでメールの閲覧ができないエラー

このQ&Aのポイント
  • Javaメールクライアントでメールの閲覧ができないエラーが発生しています。正しいソースコードを教えてください。
  • Javaメールクライアントのプログラムでメールの閲覧ができずエラーが発生しています。ソースコードの修正方法を教えてください。
  • Javaメールクライアントを使用してメールを閲覧するプログラムを作成していますが、エラーが発生してメールの閲覧ができません。解決策を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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)

回答No.5

もうひとつありました。 入力を確定させるために q を押したあと、 Unix 系では CTRL-D、Windows では CTRL-Z で入力終了を 確定させてみたらと思います。

回答No.4

あともうひとつ、 while (true) { を while (in.hasNext()) { に変えてみてください。

回答No.3

SSL なしに接続できるところがないので、実行はしてませんでした。 冒頭を public class QA8297233No1 { private static Scanner in; public static void main(String[] args) { in = new Scanner(System.in); というように in を static にするとどうですか。

回答No.2

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

johosiritai
質問者

補足

無事に起動できたのですがメールを閲覧後、終了かリストのコマンドを打つと反応しなくてしばらくたつとdisconnected for inactivityというエラーが出てしまうのですがこれはプログラムの仕様ですか?

回答No.1

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

関連するQ&A