Newsgroup: it.comp.java
Titolo: Problema Javamail

Ciao a tutti,
vi espongo subito il mio problema.
Sto preparando delle semplici pagine di registrazione in jsp che
dovrebbero inviare una email di conferma di avvenuta registrazione e
stò utilizzando il package javax.mail (Javamail) per l'invio.
Tutto procede correttamente se effettuo la registrazione da una
macchina che si collega ad internet tramite normale linea telefonica,
i problemi nascono se invece utilizzo una macchina che fa parte di una
lan dove l'accesso ad internet è regolato da un proxy.
Codice:
try {
    String host = "
mail.infinito.it
";
    //Prepare session
    java.util.Properties props = System.getProperties();
    props.put("mail.MailTransport.protocol", "smtp");
    props.put("mail.smtp.host", host);
    javax.mail.Session session =
javax.mail.Session.getDefaultInstance(props,null);
    session.setDebug(true);
    //Prepare message
    javax.mail.internet.MimeMessage message = new
javax.mail.internet.MimeMessage(session);
    message.setFrom(new
javax.mail.internet.InternetAddress("X...@XXX.XX"));
    message.setRecipient(
javax.mail.Message.RecipientType.TO
,new
javax.mail.internet.InternetAddress("Y...@YYY.YY"));
    message.setSentDate(new java.util.Date());
    message.setSubject("This is the test mail's subject.");
    message.setText("This is the test mail's content.");
    message.saveChanges();
    //Send message
    javax.mail.Transport.send(message);
  }
  catch (java.io.UnsupportedEncodingException e) {
    e.printStackTrace();
  }
  catch (javax.mail.NoSuchProviderException e) {
    e.printStackTrace();
  }
  catch (javax.mail.MessagingException e) {
    e.printStackTrace();
  }
Questo è un esempio che si trova i abbondanza su internet e
funzionante ma in una lan genera il seguente errore :
DEBUG: getProvider() returning
javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun
Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth false
DEBUG: SMTPTransport trying to connect to host "
mail.infinito.it
",
port 25
javax.mail.MessagingException: Unknown SMTP host: 
mail.infinito.it
;
  nested exception is: 	java.net.UnknownHostException:
mail.infinito.it
	..............................
	..............................
Continuando a leggere su internet ho trovato questa variante :
String host = java.net.InetAddress.getLocalHost().getHostName();
ma il risultato è stato il seguente :
DEBUG: getProvider() returning
javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun
Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth false
DEBUG: SMTPTransport trying to connect to host "HHHHHHHHHHHHH", port
25
DEBUG SMTP RCVD: 220 HHHHHHHHHHHHH Microsoft ESMTP MAIL Service,
Version: 6.0.2600.1106 ready at  Wed, 18 Aug 2004 12:34:08 +0200
DEBUG: SMTPTransport connected to host HHHHHHHHHHHHH", port: 25
DEBUG SMTP SENT: EHLO HHHHHHHHHHHHH
DEBUG SMTP RCVD: 250-HHHHHHHHHHHHH Hello [10.149.29.137]
250-SIZE 2097152
250-PIPELINING
250-DSN
250-ENHANCEDSTATUSCODES
250-8bitmime
250-BINARYMIME
250-CHUNKING
250-VRFY
250 OK
DEBUG SMTP Found extension "SIZE", arg "2097152"
DEBUG SMTP Found extension "PIPELINING", arg ""
DEBUG SMTP Found extension "DSN", arg ""
DEBUG SMTP Found extension "ENHANCEDSTATUSCODES", arg ""
DEBUG SMTP Found extension "8bitmime", arg ""
DEBUG SMTP Found extension "BINARYMIME", arg ""
DEBUG SMTP Found extension "CHUNKING", arg ""
DEBUG SMTP Found extension "VRFY", arg ""
DEBUG SMTP Found extension "OK", arg ""
DEBUG SMTP: use8bit false
DEBUG SMTP SENT: MAIL FROM:<X...@XXX.XX>
DEBUG SMTP RCVD: 250 2.1.0 X...@XXX.XX....Sender OK
DEBUG SMTP SENT: RCPT TO:<Y...@YYY.YY>
DEBUG SMTP RCVD: 550 5.7.1 Unable to relay for Y...@YYY.YY
Invalid Addresses
  Y...@YYY.YY
DEBUG SMTPTransport: Sending failed because of invalid destination
addresses
DEBUG SMTP SENT: RSET
DEBUG SMTP RCVD: 250 2.0.0 Resetting
javax.mail.SendFailedException: Invalid Addresses;
  nested exception is: 	javax.mail.SendFailedException: 550 5.7.1
Unable to relay for Y...@YYY.YY
Come posso risolvere questo problema?
La mia necessità è che funzioni correttamente registrandosi sia da
macchinae in lan che non.
Grazie per l'attenzione.

   Y...@YYY.YY
[cut]
Dunque non credo sia un errore di LAN o di MODEM, toglimi subito una 
curiosità la tua connessione ad internet funziona con infinito!? Allora 
in genere quando si tratta di errore del tipo unable to relay è perchè 
il gestore del server SMTP impedisce a chiunque di utilizzare il suo 
server per inviare mail ad eccezione dei suoi clienti. Una cosa simile 
la puoi verificare se ti connetti ad internet tramite una connessione 
tiscali che come normalmenta accade offre la possibilità di utilizzare 
la relativa casella email tramite i loro server SMTP e POP3. Dunque 
quando non ti connetti tramite la connessione tiscali, ma ad esempio con 
una connessione di Libero, Tiscali ti nega la possibilità di utilizzare 
il server SMTP per poter inviare le mail e hai come risposta un errore 
del tipo "Unable to relay..." anche se l'indirizzo che hai scritto è uno 
che SICURAMENTE esiste. Per evitare ciò dovresti provare ad utilizzare 
un server SMTP libero o gestito dallo stesso fornitore di banda del server.
Ciao,
jRed.
PS: Una curiosità dove hai trovato l'intero codice per l'invio della mail?!

 Unable to relay for Y...@YYY.YY
Hai guardato cos'e' l'error 550?
Semplicemente, l'smtp peer che usi non permette il relay verso l'utente 
Y...@YYY.YY.
Usa un smtp peer che lo permetta.

Quello che intendevo è che non è un errore di modem o lan.
Se io dalla mia macchina mi connetto ad internet tramite tiscali o
infinito e poi invio una email tutto funziona correttamente.
Il problema sta nell'inviare email andando su internet tramite un
proxy e non connettendomi direttamente tramite provider.
Io penso che le due tipologie di errori siano dovute nel primo caso
perchè non viene riconosciuto smtp server nel secondo perchè
utilizzando localhost come server smtp virtuale non vengano
riconosciuti gli indirizzi email.
Quello che vorrei capire è se c'è un modo per far si che le email
vengano inviate anche in questa situazione, cioè se ci sia un modo per
configurare nelle javamail il proxy affinchè poi tutti gli indirizzi
possano essere risolti esternamente e non internamente alla lan.
P.S.
 Non ricordo di preciso dove ho trovato il codice ma una qualsiasi
ricerca su un motore con avamail ed esempi te ne tira fuori quanti ne
vuoi.
Grazie.

 vuoi.
Quello era ovvio basta googlare un pochino e via! ;-)

 DEBUG SMTP RCVD: 550 5.7.1 Unable to relay for Y...@YYY.YY
Semplicemente: usi il programma da due reti diverse e da un collegamento 
puoi utilizzare il server 
mail.infinito.it
 e da l'altro no. Tutto 
assolutamente normale (prova a fare la stessa operazione con un client 
di posta qualsiasi...).
Hint: trova un modo di parametrizzare questi settaggi, cablarli nel 
codice non è bello (e questa ne è una conferma).