//classe con il compito di restituire via protocollo SMTP il fle-risultato al Client //con altresi' la funzionalita' di controllare l'esistenza dell'indirizzo Mail fornito import java.io.*; import java.net.*; import java.util.*; public class gestoreMail { private String destination; public gestoreMail(String arg_mail) { destination=arg_mail; } //non deve fare assolutamente exit in caso di errore ma return!!!! public int sendMail(String nomeFile) { boolean error=false; Socket soc; if (!ConstantsM.useMail) return 0; // simulazione invio mail int pos=destination.indexOf('@'); if (pos==-1) return -1; String host=destination.substring(pos+1,destination.length()); BufferedReader inp=null; //in nomeFile posso avere "errore" e allora mando una mail con scritto errore!!! if (nomeFile.equals("errore")) error=true; else try { // verifica che il file nomeFile sia leggibile inp=new BufferedReader(new FileReader(nomeFile)); } catch(IOException ex) { System.out.println("gestoreMail.sendMail: "+ex.toString()); return -1; } // manda la mail. try { System.out.println("gestoreMail.sendMail: mando la mail"); soc=new Socket(host,25); soc.setSoTimeout(Constants.attesaRec*2); // per le letture prima della chiusura BufferedReader inbuf=new BufferedReader(new InputStreamReader(soc.getInputStream())); PrintWriter outbuf=new PrintWriter(soc.getOutputStream(),true); outbuf.println("helo "+(soc.getLocalAddress()).getHostAddress()); outbuf.println("mail from: result@treesearch.org"); outbuf.println("rcpt to: "+destination); outbuf.println("data"); outbuf.println("To: "+destination); outbuf.println("Subject: TreeSearch Result\n"); if (error) { outbuf.println("errore nella ricerca"); System.out.println("gestoreMail.sendMail: messaggio di errore scritto nella mail."); } else { String inStr; while ((inStr=inp.readLine())!=null) outbuf.println(inStr); inp.close(); System.out.println("gestoreMail.sendMail: ok, dati scritti nella mail."); } outbuf.println("."); outbuf.println("quit"); // raccoglie i msg di risposta del server per una corretta termina- // zione (necessario prima di chiudere la connessione). String line; for (int j=0;j<8;j++) line=inbuf.readLine(); inbuf.close();outbuf.close();soc.close(); return 0; } catch(UnknownHostException ex) { System.out.println("gestoreMail.sendMail: "+ex.toString()); return -1; } catch(InterruptedIOException ex) { // lo scadere del timeout di lettura e' intercettato qui. System.out.println("gestoreMail.checkMail: "+ex.toString()); return -1; } catch(IOException ex) { System.out.println("gestoreMail.sendMail: "+ex.toString()); return -1; } catch(SecurityException ex) { System.out.println("gestoreMail.checkMail: "+ex.toString()); return -1; } }//fine sendMail // controlla la validita' dell'indirizzo e-mail. Si suppone che il // comando vrfy del protocollo SMTP dia sempre dei risultati validi. public boolean checkMail() { Socket soc=null; if (!ConstantsM.useMail) return true; // simulazione check indirizzo int pos=destination.indexOf('@'); if (pos==-1) return false; String host=destination.substring(pos+1,destination.length()); try { soc=new Socket(host,25); soc.setSoTimeout(Constants.attesaRec*2); // per le letture delle risposte del server BufferedReader inbuf=new BufferedReader(new InputStreamReader(soc.getInputStream())); PrintWriter outbuf=new PrintWriter(soc.getOutputStream(),true); String line; line=inbuf.readLine(); // legge il msg di benvenuto outbuf.println("helo "+(soc.getLocalAddress()).getHostAddress()); line=inbuf.readLine(); // legge la risposta outbuf.println("vrfy "+destination); line=inbuf.readLine(); // legge la risposta // verifica il codice: 250 = OK boolean res; if ((line.substring(0,3)).equals("250")) res=true; else res=false; outbuf.println("quit"); line=inbuf.readLine(); // legge la risposta line=inbuf.readLine(); inbuf.close();outbuf.close();soc.close(); return res; } catch(UnknownHostException ex) { System.out.println("gestoreMail.checkMail: "+ex.toString()); return false; } catch(InterruptedIOException ex) { // lo scadere del timeout di lettura e' intercettato qui. System.out.println("gestoreMail.checkMail: "+ex.toString()); return false; } catch(IOException ex) { System.out.println("gestoreMail.checkMail: "+ex.toString()); return false; } catch(SecurityException ex) { System.out.println("gestoreMail.checkMail: "+ex.toString()); return false; } } }//fine class gestoreMail