usando smtp gmail para enviar correo

Me gustaría saber cómo enviar correo desde el programa Java. He escrito el programa de correo de Java, no hay nada de malo en eso. pero obtuve el puerto SMTP 465 desconocido, incluso utilicé el puerto 465 del servidor de correo g. Quiero saber si hay alguna opción que deba habilitar en mi computadora. por favor avíseme lo que se requiere, paso a paso estoy usando Windows 7 y quiero usar el servidor de Gmail ..

su esfuerzo será muy agradecido.

por favor avíseme cualquier error al seguir.

Exception in thread "main" java.lang.RuntimeException: javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 465;
  nested exception is:
    javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path validation failed: java.security.cert.CertPathValidatorException: timestamp check failed
    at mail1.SendMailSSL.main(SendMailSSL.java:44)
Caused by: javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 465;
  nested exception is:
    javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path validation failed: java.security.cert.CertPathValidatorException: timestamp check failed
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1706)
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:525)
    at javax.mail.Service.connect(Service.java:310)
    at javax.mail.Service.connect(Service.java:169)
    at javax.mail.Service.connect(Service.java:118)
    at javax.mail.Transport.send0(Transport.java:188)
    at javax.mail.Transport.send(Transport.java:118)
    at mail1.SendMailSSL.main(SendMailSSL.java:39)
Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path validation failed: java.security.cert.CertPathValidatorException: timestamp check failed
    at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1611)
    at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:187)
    at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:181)
    at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1035)
    at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:124)
    at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:516)
    at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:454)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:884)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1112)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1139)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1123)
    at com.sun.mail.util.SocketFetcher.configureSSLSocket(SocketFetcher.java:503)
    at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:234)
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1672)

preguntado el 10 de marzo de 12 a las 05:03

¿Está haciendo esto desde su máquina doméstica? Algunos ISP bloquean el acceso a servidores SMTP externos como medida antispam. -

Mire más abajo en el seguimiento de la pila. El error tiene que ver con SSL. ¿Escribiste código de manejo de SSL? -

si lo estoy haciendo de mi forma personal? por favor dime lo que hago -

4 Respuestas

Esta solución me funciona perfectamente. Debe importar el certificado del servidor smtp de GMail a su almacén de confianza

  1. Obtenga el certificado del servidor smtp de Gmail con el comando openssl

    "s_client -connect smtp.gmail.com:465"

  2. Guarde la salida entre "----- BEGIN CERTIFICATE -----" y "----- END CERTIFICATE -----" (incluido ese prefijo / sufijo) en el archivo "gmail.cert"

  3. Importe este archivo de certificado a su almacén de claves (para Linux necesitará sudo)

    keytool -import -alias smtp.gmail.com -keystore "% JAVA_HOME% / jre / lib / security / cacerts" -file gmail.cert

  4. Reinicie su aplicación java para propagar los cambios

Créditos al: http://notepad2.blogspot.com/2012/04/import-gmail-certificate-into-java.html

OpenSSL se puede descargar aquí: http://gnuwin32.sourceforge.net/packages/openssl.htm

Respondido el 11 de junio de 13 a las 18:06

Pero, ¿qué pasa con las aplicaciones integradas que se ejecutan en diferentes hosts? - Menai Ala Eddine - Aladino

Intenta usar el comando telnet smtp.gmail.com 465 para ver si puede conectarse. Esto debería darle una indicación de si se está conectando o no. Pruebe también el puerto 587 (Submission / StartTLS) que debería dar un encabezado visible.

Telnet no está instalado de forma predeterminada en Windows 7. Debería poder instalarlo desde la línea de comandos con el comando pkgmgr /iu:"TelnetClient".

Una vez que se conecte, deberá autenticarse con una identificación y contraseña de Gmail para enviar correo. Parece que su código aún no se está conectando.

respondido 10 mar '12, 05:03

Busque pistas adicionales agregando la opción de depuración a los accesorios que esté pasando al obtener la sesión. Creo que verá que en realidad se está conectando al backend de gmail, ya que su excepción es durante send () y no durante connect (), lo que significa que el host / puerto / id / psw que está utilizando es probablemente correcto (a menos que haya algún tipo de conexión perezosa sucediendo).

props.put("mail.debug", "" + true); // Enable debug mode
Session session = Session.getInstance(props, new javax.mail.Authenticator() {
    @Override
    protected PasswordAuthentication getPasswordAuthentication() {
         return new PasswordAuthentication(smtpId, psw);
    }
});

Su salida de depuración debería verse así:

DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 465, isSSL true
9 220 mx.google.com ESMTP cpxgxgxgxgxgxgb.3
DEBUG SMTP: connected to host "smtp.gmail.com", port: 465

respondido 10 mar '12, 06:03

¿Está utilizando un SSLSocket, como este?

SSLSocket s = (SSLSocket) ((SSLSocketFactory) 
                            SSLSocketFactory.getDefault()).
                            createSocket(InetAddress.getByName("smtp.gmail.com"), 465);

Respondido el 21 de junio de 12 a las 18:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.