java

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.

  1. 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);
    }
  }
}
  1. 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.

3 Comentarios

  1. Hola buenos dias,
    Intente hacerlo con la opcion de TLS pero no envia el mail, al parecer genera algun error interno, me podrian ayudar.

Dejar respuesta

Please enter your comment!
Please enter your name here