ho finalmente messo a punto il POP3 in java, ma manca un piccolo particolare.
Il metodo mediante la classe StringTokenizer deve suddividere il messaggio nelle parti corrispondenti ai campi indicati nell’oggetto della classe Messaggio (sottoclasse annidata nella classe Msg) (Sender, Subject e Date) quindi deve invocare il metodo adNewMsg della classe Msg (un'altra classe del client Email) passandogli come parametri le variabili dei vari campi.
codice:import java.net.*; import java.io.*; import java.util.*; public class RiceviMsg { int port; String host; private static BufferedReader in; private static DataOutputStream out; public static void main(java.lang.String[] args) throws Exception { String username = args[0]; // users name String password = args[1]; // password String popServer = args[2]; // POP servers name. boolean delete = false; boolean secure = false; String inputLine; // string to store the line of text we read in. String numeroMessaggi; // numero messaggi try { if (args.length > 3) if (args[3].compareTo("-s") == 0) secure = true; else if (args[3].compareTo("-d") == 0) delete = true; else System.out.println("Errore: La sintassi è %java PopClient <username> <password> [-s] [-d]"); if (args.length > 4) if (args[4].compareTo("-s") == 0) secure = true; else if (args[4].compareTo("-d") == 0) delete = true; else System.out.println("Errore: La sintassi è %java PopClient <username> <password> [-s] [-d]"); // connessione al server Socket s = new Socket("nome_host", 110); // host e porta out = new DataOutputStream( s.getOutputStream() ); in = new BufferedReader( new InputStreamReader(s.getInputStream()) ); String line; inputLine = readFromInputStream(); // autenticazione if (!readFromInputStream().startsWith("+OK")) { System.out.println("User name errato, disconnessione in corso"); s.close(); System.exit(1); } // invio pass System.out.println("PASS " + password); System.out.println("c: PASS ********"); // aspetta la risposta inputLine = readFromInputStream(); if (!inputLine.startsWith("+OK")) { System.out.println("Password errata, disconnesisone in corso"); s.close(); System.exit(1); } else { String timeStamp = inputLine.substring(4,inputLine.length()); System.out.println(timeStamp); } DataOutputStream("STAT"); inputLine = readFromInputStream(); if (!inputLine.startsWith("+OK")) { System.out.println("Errore:" + inputLine); s.close(); System.exit(1); } int i = inputLine.lastIndexOf(' '); numeroMessaggi = inputLine.substring(4,i); System.out.println("Hai " + numeroMessaggi + " messaggio/i nella tua mailbox!"); // scarica i messaggi // per ogni messaggio invochiamo il comando RETR with as parameter the number // (index) of the message int n = Integer.parseInt(numeroMessaggi); int numberBytes; for (int msg = 1;msg<=n;msg++) { System.out.println("Retreaving message " + msg); DataOutputStream("RETR " + msg); inputLine = readFromInputStream(); if (!inputLine.startsWith("+OK")) { System.out.println("Error: " + inputLine); s.close(); System.exit(1); } i = inputLine.lastIndexOf(' '); numberBytes = Integer.parseInt(inputLine.substring(4,i)); inputLine = in.readLine(); while (inputLine.compareTo(".") != 0) { if (inputLine.compareTo("..") == 0) System.out.println("."); else System.out.println(inputLine); inputLine = in.readLine(); } if (delete) { DataOutputStream("DELE " + msg); readFromInputStream(); } }//for // fine della connessione e della classe RiceviMsg DataOutputStream("QUIT"); readFromInputStream(); s.close(); System.exit(1); } catch (IOException e) { System.err.println("IOException : " + e);} } // metodo DataOutputStream private static void DataOutputStream(String s) throws IOException { System.out.println("c: " + s); System.out.println(s); return; } // metodo readFromInputStream private static String readFromInputStream() throws IOException { String s = in.readLine(); if (s != null) System.out.println("s: " + s); return s; } }
ho capito che devo importare la classe stringtockenizer, ma non ho capito come fare tutto il resto. Qualcuno può aiutarmi?
Grazie

Rispondi quotando