Newsgroup: it.comp.java
Titolo: Sto provando a scrivere un cliente e-mail in java AIUTOOOOOOOOOOO!!!!!!

Innanzitutto grazie per esservi soffermati a leggere questo post.
Sto provando a scrivere un piccolo client di posta elettronica in Java, 
niente di particolare, molto umile, non ho pretese, vorrei solo provare ad 
automatizzare quello che faccio di solito con Telnet usando il protocollo 
SMTP.
Descrivo in linea di massima quello che fa il programma:
- crea la Socket con l'IP del server e la porta 25
- referenzia i canali per la connessione FullDuplex() ( InputStream e 
OutputStrea ...)
- legge il messaggio di benvenuto del server e controlla il codidce 
chiamando un altro metodo che legge i    primi  tre caratteri e li convetre 
in decimale.
- controlla che il codice sia 220... Ok
- scrive sull'OutputStream della Socket la stringa "HELO localhost" mediante 
un oggetto PrintWriter, ho anche provato a scrivere direttamente con 
write(byte[] buff) ma credo che sia la stessa cosa (credo)
-adesso vado a leggere dall'InputStreamReader ma il vecchio contenuto non 
viene sovrascritto
                                Come posso risolvere questo problema?
                                Perdipiù se provo a leggere dall'input ad 
es. con
                                                                while((c = 
dalServer.read()) != -1 )
                                                                        stringa 
+= "" + (char)c;
                            il programma va in loop infinito perchè il 
controllo del ciclo while fallisce sempre.
Le ho provate in tutti i modi ma non riesco a risolvere questi due problemi.
Vi ringrazio per i vostri suggerimenti.
Andrea82. 

 SMTP.
Perche' non usare JavaMail API ?
-- 
Giambo - Occhio al filtro antispam _e_ alla whitelist !

 Giambo - Occhio al filtro antispam _e_ alla whitelist !
Non posso usarlo, purtroppo devo fare tutto dasolo.
Sono riuscito a risolvere il problema di non riuscire a leggere la risposta 
inserendo dopo l'invio di una richiesta un ciclo che non fa nulla in modo da 
metter il programma in una specie di wait (diciamo una soluzione 
temporanea).
Adesso perņ le nuove risposte le trovo accodate alle vecchie 
nell'InputStream,  perchč non riesco a svuotare l'InputStream con una 
semplice read() fina a quando restituisce -1; infatti il loop diventa 
infinito perchč non rileva mai la fine dell'input quindi non restituisce 
mai -1.
Come faccio a svuotare l'InputStream completamente? 

 Come faccio a svuotare l'InputStream completamente?
Per evitare i loop infiniti prova a inglobare il tuo InputStream in un 
BufferedReader:
BufferedReader br = new BufferedReader(new 
InputStreamReader(socket.getInputStream()));
e poi utilizzi il metodo br.readLine() per leggere dal socket. La 
readLine() è un metodo che legge una riga per volta dall'input stream 
ed esce quando trova un "a capo" (\r o \n), restituendoti la stringa 
letta senza il terminatore di linea.
Ciao,
Elvandar


Ho risolto il problema chiamando read() della classe InputStreamReader, 
inglobando l'InputStream in un InputStreamReader, fino a quando non trova il 
codice del carattere '\n' e facendogli scartare anche quest'ultimo, in 
questo modo funziona.
Avevo gia provato col BufferedReader ma stranamente anche il metodo 
readLine() bloccava il programma. Com'è possibile?
Comunque grazie. 

Giambo wrote:
Perche' non usare JavaMail API ?
sarei interessato a JavaMail ma sulle API non l'ho trovato. In quale
libreria si trova?

 libreria si trova?
Non lo trovi perchè non c'è. Scaricalo dal sito sun insieme a qualche 
tutorial. Poi trovi le api sotto javax.mail.*
-- 
Emanuele Torrenti
Registered Linux User #409659
http://torrenti.altervista.org

 tutorial. Poi trovi le api sotto javax.mail.*
Dimenticavo che trovi del buon materiale su mokabyte.
