Author Topic: Enviar correos con javamail  (Read 1990 times)

sergioct15

  • Newbie
  • *
  • Posts: 14
  • Karma: 0
    • View Profile
Enviar correos con javamail
« on: Mayo 23, 2013, 12:38:15 pm »
Buenas de nuevo.

En mi aplicacion web quiero añadir la opcion de enviar correos electronicos, y habia pensado hacerlo con javamail, ya que lo habia utilizado ya en una aplicacion de escritorio y funcionaba perfectamente.

Una vez que lo tuve todo preparado para poder enviar me da un error en el momento q intento establecer la conexion:

t.connect("ejemplo@gmail.com","la password");

El código es el de esta página:

http://www.chuidiang.com/java/herramientas/javamail/enviar-correo-javamail.php

Y he probado a enviar correos desde mi aplicacion de escritorio y me da el mismo fallo, cuando antes funcionaba perfectamente.

Puede ser por alguna configuracion de mi pc? La unica explicacion que encuentro es que algo se desconfigurara al instalar el Spring Tools Suite y el servidor tomcat

Pd: envio desde correo gmail.

Muchas gracias

chuidiang

  • Administrator
  • Hero Member
  • *****
  • Posts: 4986
  • Karma: 12
    • View Profile
    • Apuntes de programación
Re: Enviar correos con javamail
« Reply #1 on: Mayo 23, 2013, 12:50:59 pm »
Hola:

Estaría bien si fueras más específico en lo de "me da un error", si no, parece un juego de adivinanzas, puede ser cualquier cosa  ;)

Se bueno.

sergioct15

  • Newbie
  • *
  • Posts: 14
  • Karma: 0
    • View Profile
Re: Enviar correos con javamail
« Reply #2 on: Mayo 23, 2013, 01:09:49 pm »
Tienes toda la razón, perdona.

El error que me da es el siguiente:

250 ENHANCEDSTATUSCODES
smtp DEBUG: Processing extension SIZE 35882577
smtp DEBUG: Processing extension 8BITMIME
smtp DEBUG: Processing extension STARTTLS
smtp DEBUG: Processing extension ENHANCEDSTATUSCODES
may 23, 2013 2:03:19 PM com.companyname.cretolan.web.ContactoController EnviarMail
SEVERE: null
javax.mail.MessagingException: Unable to obtain SASL authenticator
   at org.apache.geronimo.javamail.transport.smtp.SMTPConnection.processAuthentication(SMTPConnection.java:1040)
   at org.apache.geronimo.javamail.transport.smtp.SMTPConnection.protocolConnect(SMTPConnection.java:155)
   at org.apache.geronimo.javamail.transport.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:165)
   at javax.mail.Service.connect(Service.java:251)
   at javax.mail.Service.connect(Service.java:105)
   at com.companyname.cretolan.web.ContactoController.EnviarMail(ContactoController.java:245)
   at com.companyname.cretolan.web.ContactoController.manejarFormularioYaValidado(ContactoController.java:142)

Donde en ContactoController.java en la linea 245 tengo:

239               //ENVIAMOS EL MENSAJE
240
241                Transport t = session.getTransport("smtp");
242
243        //Ahora debemos establecer la conexión, dando el nombre de usuario y password.
244
245                t.connect("miemail@gmail.com","mipassword");
246
247        //y ahora simplemente enviamos el mensaje
248
249                t.sendMessage(message,message.getAllRecipients());
250
251                t.close();


No entiendo muy bien el motivo por el que me da este error, si pudieras darme una idea...
Muchas gracias y disculpa.

chuidiang

  • Administrator
  • Hero Member
  • *****
  • Posts: 4986
  • Karma: 12
    • View Profile
    • Apuntes de programación
Re: Enviar correos con javamail
« Reply #3 on: Mayo 23, 2013, 01:33:52 pm »
Lo de "org.apache.geronimo.javamail...." tiene mala pinta, parece que se te "ha colado" algún jar extraño con javamail. De hecho, si buscas tu texto de error en google "Unable to obtain SASL authenticator" aparecen cosas de un "bug" de apache geronimo.

En cualquier caso, revisa las propiedades con las que configuras la conexión de javamail, como mail.smtp.starttls.enable o mail.smtp.auth que coincidan bien con las de gmail.

Se bueno.

sergioct15

  • Newbie
  • *
  • Posts: 14
  • Karma: 0
    • View Profile
Re: Enviar correos con javamail
« Reply #4 on: Mayo 23, 2013, 05:18:50 pm »
He cambiado la librería de javamail, me fié de los repositorios de Maven y resulta que javamail no esta en esos repositorios.

Aún así, me sigue dando error:

DEBUG SMTP: Found extension "SIZE", arg "35882577"
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "STARTTLS", arg ""
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
DEBUG SMTP: use8bit false
MAIL FROM:<cretolancb@gmail.com>
530 5.7.0 Must issue a STARTTLS command first. fu14sm16754637wic.0 - gsmtp
com.sun.mail.smtp.SMTPSendFailedException: 530 5.7.0 Must issue a STARTTLS command first. fu14sm16754637wic.0 - gsmtp

   at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1388)
   at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:959)
   at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:583)
   at com.companyname.cretolan.web.ContactoController.EnviarMail(ContactoController.java:248)
   at com.companyname.cretolan.web.ContactoController.manejarFormularioYaValidado(ContactoController.java:142)

En este caso el error lo tengo en la línea:

t.sendMessage(message,message.getAllRecipients());

y he comprobado los valores de las propiedades de configuración y sí son las correctas, las que tienes en el tutorial de tu página.

chuidiang

  • Administrator
  • Hero Member
  • *****
  • Posts: 4986
  • Karma: 12
    • View Profile
    • Apuntes de programación
Re: Enviar correos con javamail
« Reply #5 on: Mayo 23, 2013, 05:24:11 pm »
Buscando el error "Must issue a STARTTLS command first" en google, sale esto http://stackoverflow.com/questions/386083/must-issue-a-starttls-command-first-sending-email-with-java-and-google-apps

Prueba a ver.

Se bueno.

sergioct15

  • Newbie
  • *
  • Posts: 14
  • Karma: 0
    • View Profile
Re: Enviar correos con javamail
« Reply #6 on: Mayo 23, 2013, 11:03:02 pm »
Ya había probado esa posible solución y la descarté por que me daba mas errores otros errores:

DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 465, isSSL true
may 23, 2013 11:56:25 PM com.companyname.cretolan.web.ContactoController EnviarMail
SEVERE: null
javax.mail.MessagingException: Exception reading response;
  nested exception is:
   javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
   at com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:1462)
   at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1260)
   at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:370)
   at javax.mail.Service.connect(Service.java:275)
   at javax.mail.Service.connect(Service.java:156)

Ya te digo que no se muy bien cual es el problema, por eso te digo que si puede ser un problema de configuración de mi ordenador, ya que si ejecuto mi aplicación de escritorio, que como te dije antes también me falla, en otro ordenador envía correos electrónicos correctamente.

chuidiang

  • Administrator
  • Hero Member
  • *****
  • Posts: 4986
  • Karma: 12
    • View Profile
    • Apuntes de programación
Re: Enviar correos con javamail
« Reply #7 on: Mayo 23, 2013, 11:15:59 pm »
Hola:

Prueba a añadir esto a ver props.put("mail.smtp.starttls.required", "true");

Se bueno.

sergioct15

  • Newbie
  • *
  • Posts: 14
  • Karma: 0
    • View Profile
Re: Enviar correos con javamail
« Reply #8 on: Mayo 24, 2013, 12:01:05 am »
Hola, no funciona, el error es el mismo.