import java.io.*; import java.net.*; public class PopClient { private BufferedReader from_server; private BufferedReader from_user; private PrintWriter to_server; private PrintWriter to_user; private String[] senders; private String[] dates; private String[] sizes; private String no_of_messages; public PopClient(int p, String h) { try { String host = h; int port = p; Socket s = new Socket(host,port); from_server = new BufferedReader(new InputStreamReader(s.getInputStream())); to_server = new PrintWriter (new OutputStreamWriter(s.getOutputStream())); from_user = new BufferedReader(new InputStreamReader(System.in)); to_user = new PrintWriter(new OutputStreamWriter(System.out)); } catch (Exception e) { System.err.println("Error occurred creating socket."); System.exit(1); } } public void connect(String u, String p) { try { String user = u; String pass = p; String response = from_server.readLine(); to_server.println("user "+user); to_server.flush(); response = from_server.readLine(); to_server.println("pass "+pass); to_server.flush(); response = from_server.readLine(); } catch (Exception e) { System.err.println("Error occurred logging onto mailbox."); System.exit(2); } } public void listMessages() { try { to_server.println("STAT"); to_server.flush(); String response = from_server.readLine(); String message_no = response.substring(4); int i = message_no.indexOf(" "); response = message_no.substring(0,i); no_of_messages = response; int messages = Integer.parseInt(response); senders = new String[messages]; dates = new String[messages]; sizes = new String[messages]; for (i = 1; i <= messages; i++) { to_server.println("TOP "+i+" 0"); to_server.flush(); response = from_server.readLine(); while (!(response.equals("."))) { if (response.indexOf("From:") != -1) { String sender = response.substring(4); senders[i-1] = sender; } if (response.indexOf("Date:") != -1) { String date = response.substring(5); dates[i-1] = date.replace(' ','_'); } response = from_server.readLine(); } } for (i=1;i<=messages;i++) { to_server.println("list "+i); to_server.flush(); response = from_server.readLine(); int start_size = response.lastIndexOf(" "); String size = response.substring(start_size+1); sizes[i-1] = size; } } catch (Exception e) { System.err.println(e); System.exit(2); } } public void retreive(int m, String name) { int message_no = m; String filename = name; File text = new File(filename); try { FileWriter to_file = new FileWriter(text); to_server.println("retr "+message_no); to_server.flush(); String response = from_server.readLine(); //dump the server response line response = from_server.readLine(); int length = response.length(); while(!(response.equals("."))) { to_file.write(response); to_file.flush(); to_file.write("\n"); to_file.flush(); response = from_server.readLine(); } to_file.write("."); // restore the message to proper smtp format to_file.flush(); try { to_file.close(); } catch (IOException ioe) { System.err.println("Error occurred closing message "+message_no); System.exit(8); } } catch (Exception e) { System.err.println("Error occurred retreiving message "+message_no); System.exit(7); } } public void delete(int m) { int message_no = m; try { to_server.println("Dele "+message_no); to_server.flush(); String response = from_server.readLine(); } catch (Exception e) { System.err.println("Error deleting message "+message_no); System.exit(5); } } public void disconnect() { try { to_server.println("quit"); to_server.flush(); String response = from_server.readLine(); } catch (Exception e) { System.err.println("Error occurred disconnecting from server."); System.exit(4); } } public String getSenders(int i) { return senders[i]; } public String getDates(int i) { return dates[i]; } public String getSizes(int i) { return sizes[i]; } public String getNoOfMessages() { return no_of_messages; } }