2009-11-23 14 views
6
Email email = new SimpleEmail(); 
String authuser = "[email protected]"; 
String authpwd = "*******"; 
// Very Important, Don't use email.setAuthentication() 
email.setSmtpPort(465); 
email.setAuthenticator(new DefaultAuthenticator(authuser, authpwd)); 
email.setDebug(true); // true if you want to debug 
email.setHostName("smtp.gmail.com"); 

email.getMailSession().getProperties().put("mail.smtp.auth", "true"); 
email.getMailSession().getProperties().put("mail.debug", "true"); 
email.getMailSession().getProperties().put("mail.smtp.port", "465"); 
email.getMailSession().getProperties().put("mail.smtp.socketFactory.port", "465"); 
email.getMailSession().getProperties().put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 
email.getMailSession().getProperties().put("mail.smtp.socketFactory.fallback", "false"); 
email.getMailSession().getProperties().put("mail.smtp.starttls.enable", "true"); 
email.setFrom("[email protected]", "SenderName"); 
email.setSubject("TestMail"); 
email.setMsg("This is a test mail?"); 
email.addTo("[email protected]", "ToName"); 
email.send(); 

y da la siguiente excepciónEl envío de un correo electrónico El uso Commons-correo electrónico a Gmail

SEVERE: org.apache.commons.mail.EmailException: Sending the email to the following server failed : smtp.gmail.com:465 
+0

¿Se puede publicar todo el seguimiento de la pila de excepciones? La causa de la excepción probablemente se encuentre en alguna parte. La excepción es genérica. Podría ser un error de autenticación simple o podría ser otra cosa. ovaciones – aldrin

Respuesta

14

Esto funciona para mí

Email email = new SimpleEmail(); 
String authuser = "[email protected]"; 
String authpwd = "xxxx"; 
email.setSmtpPort(587); 
email.setAuthenticator(new DefaultAuthenticator(authuser, authpwd)); 
email.setDebug(true); 
email.setHostName("smtp.gmail.com"); 
email.getMailSession().getProperties().put("mail.smtps.auth", "true"); 
email.getMailSession().getProperties().put("mail.debug", "true"); 
email.getMailSession().getProperties().put("mail.smtps.port", "587"); 
email.getMailSession().getProperties().put("mail.smtps.socketFactory.port", "587"); 
email.getMailSession().getProperties().put("mail.smtps.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 
email.getMailSession().getProperties().put("mail.smtps.socketFactory.fallback", "false"); 
email.getMailSession().getProperties().put("mail.smtp.starttls.enable", "true"); 
email.setFrom("[email protected]", "SenderName"); 
email.setSubject("TestMail"); 
email.setMsg("This is a test mail?"); 
email.addTo("[email protected]", "ToName"); 
email.setTLS(true); 
email.send(); 
+0

Probé con smtps también, no funciona – user217029

+0

no funciona con 587 también ... todavía no funciona – user217029

+0

Ver respuesta ampliada de nuevo – jitter

10

¿Usted no necesita a tell Commons Email that you're sending a TLS email:

email.setTLS(true); 

antes de llamar a email.send()?

No estoy seguro de si esto solucionará lo que le aqueja, ya que no estoy seguro de si tiene algún problema para conectarse a smtp.gmail.com:465 o enviarlo correctamente (el mensaje de error/excepción es ambiguo como lo has presentado), pero definitivamente es algo que falta por lo que puedo decir.

13

La guía del usuario de correo electrónico Commons tiene un ejemplo para Gmail que usa SSL.

https://commons.apache.org/proper/commons-email/userguide.html

SSL/TLS (puerto 465) -> email.setSSLOnConnect (true);

Email email = new SimpleEmail(); 
email.setHostName("smtp.gmail.com"); 
email.setSmtpPort(465); 
email.setAuthenticator(new DefaultAuthenticator("username", "password")); 
email.setSSLOnConnect(true); 
email.setFrom("[email protected]"); 
email.setSubject("TestMail"); 
email.setMsg("This is a test mail ... :-)"); 
email.addTo("[email protected]"); 
email.send(); 

STARTTLS (puerto 587) -> email.setStartTLSEnabled (true);

Email email = new SimpleEmail(); 
email.setHostName("smtp.gmail.com"); 
email.setSmtpPort(587); 
email.setAuthenticator(new DefaultAuthenticator("username", "password")); 
email.setStartTLSEnabled(true); 
email.setFrom("[email protected]"); 
email.setSubject("TestMail"); 
email.setMsg("This is a test mail ... :-)"); 
email.addTo("[email protected]"); 
email.send(); 
+0

¡Este código funciona para mí! ¡Gracias! – Ascension

+0

Obtengo la clase javax.mail.MessagingException: 530 5.7.0 Primero debe emitir un comando STARTTLS. g66sm11757390ywh.8 - gsmtp excepción. Pero, actualicé el código igual que su código. – Curious

Cuestiones relacionadas