Enviar un correo electrónico mediante una aplicación es una de las necesidades comunes que se presentan al momento de desarrollar nuestros proyectos independientes del lenguaje de programación que usemos. Para realizar este trabajo Java posee un componente llamado JavaMail, el cual posee una serie de métodos y funciones específicas que son remendados para trabajar con emails en un entorno Java.
En este artículo vamos realizar dos ejemplos para mostrarte cómo usar el método API de JavaMail para enviar un correo electrónico a través del servidor SMTP de Gmail, usando las dos formas de conexión, por TLS y SSL.
Transport Layer Security (TLS; en español seguridad de la capa de transporte) y su antecesor Secure Sockets Layer (SSL; en español capa de puertos seguros) son protocolos criptográficos, que proporcionan comunicaciones seguras por una red, comúnmente Internet.
Requerimientos
Para ejecutar este ejemplo, necesitaras dos dependencias de bibliotecas (librerías): javaee.jar y mail.jar, ambas están ya agrupadas en JavaEE SDK por lo que no necesitaremos agregarlas a nuestro proyecto, sin embargo es necesario tener conocimiento de que componentes estamos usando y para qué.
Outgoing Mail (SMTP) Server requires TLS or SSL: smtp.gmail.com (use authentication) Use Authentication: Yes Port for TLS/STARTTLS: 587 Port for SSL: 465
Como siempre en RootNite recomendamos siempre consultar la documentación oficial de la tecnología que estemos usando.
Información oficial de Java Mail aquí
Los detalles del uso de Gmail SMTP aquí
Bueno, una vez aclarado los detalles del proyecto vamos a ello.
-
JavaMail – Gmail a través de TLS
Enviando un correo electrónico a través del servidor SMTP de Gmail usando la conexión TLS.
package com.rootnite.mail; import java.util.Properties; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; public class SendingMailTLS { public static void main(String[] args) { final String username = "username@gmail.com"; final String password = "password"; Properties props = new Properties(); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.starttls.enable", "true"); props.put("mail.smtp.host", "smtp.gmail.com"); props.put("mail.smtp.port", "587"); Session session = Session.getInstance(props, new javax.mail.Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); } }); try { Message message = new MimeMessage(session); message.setFrom(new InternetAddress("from-email@gmail.com")); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("to-email@gmail.com")); message.setSubject("Testing Subject"); message.setText("Estimado cliente," + "\n\n Le damos la bienvenida mediante TLS!"); Transport.send(message); System.out.println("Correcto!"); } catch (MessagingException e) { throw new RuntimeException(e); } } }
-
JavaMail – Gmail a través de SSL
Enviando un correo electrónico a través del servidor SMTP de Gmail usando la conexión SSL.
package com.rootnite.mail; import java.util.Properties; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; public class SendingMailSSL { public static void main(String[] args) { Properties props = new Properties(); props.put("mail.smtp.host", "smtp.gmail.com"); props.put("mail.smtp.socketFactory.port", "465"); props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.port", "465"); Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("username","password"); } }); try { Message message = new MimeMessage(session); message.setFrom(new InternetAddress("from@gmail.com")); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("to@gmail.com")); message.setSubject("Testing Subject"); message.setText("Estimado cliente," + "\n\n Le damos la bienvenida mediante SSL!"); Transport.send(message); System.out.println("Correcto!"); } catch (MessagingException e) { throw new RuntimeException(e); } } }
Como pudimos ver enviar un correo electronico básico mediante SMTP con Java es bastante sencillo, sin embargo JavaMail posee una gran variedad de funciones para poder enviar imagenes, links, etc.
Hola buenos dias,
Intente hacerlo con la opcion de TLS pero no envia el mail, al parecer genera algun error interno, me podrian ayudar.
Hola, claro que si, que error te muestra en la consola? si puedes adjuntar una imagen seria ideal.
Genial el tutorial ni un sólo error con TLS
si hice una modificación para poder mandar html message.setContent(«TEXTO DEL CUERPO»,»text/html»);