gentoo linux, java, software libre y otras hierbas
Nov, 07 2009 - 2:38 pm

Enviar correo desde Java

Este es un pequeño ejemplo de cómo enviar correos desde Java usando el API de Java Mail. Lo único que necesitaremos es descargar la librería mail.jar de la página de Java Mail y crear un programa de este estilo:

import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;

public class EnviarMail {
  public static void main(String[] args) {
    try {
      // Se debe crear un archivo de propiedades que
      // contenga el nombre del servidor SMTP
      Properties props = new Properties();
      props.put("mail.host", "mail.servidorcorreo.com");

      // se crea un objeto de sesion
      Session conexionCorreo = Session.getInstance(props, null);
      // este objeto representa el mensaje a enviar
      Message mensaje = new MimeMessage(conexionCorreo);

      // los objetos Adress contienen informacion de recipientes de correo
      Address desde = new InternetAddress("tucorreo@servidorcorreo.biz",
          "Pepito Perez");
      Address para = new InternetAddress("destinatario@otroservidor.com");

      // asignamos el contenido. En este caso usamos 'text/plain' pero
      // es posible usar 'text/html' para enviar correos con contenido
      // HTML
      mensaje.setContent("Este es un mensaje de texto plano!",
          "text/plain");
      // asignar el origen del correo
      mensaje.setFrom(desde);
      // asignar un destinatario
      mensaje.setRecipient(Message.RecipientType.TO, para);
      // asignar el asunto del correo
      mensaje.setSubject("Hola, Java Mail!");

      Transport.send(mensaje);

    } catch (Exception ex) {
      ex.printStackTrace();
    }
  }
}

Para compilarlo y ejecutarlo desde la consola:

javac -cp mail.jar:. EnviarMail.java
java -cp mail.jar:. EnviarMail

Si estás usando Eclipse, debes añadir la librería mail.jar al classpath. En este artículo explico cómo hacerlo.

Descargar

15 Comentarios | deja el tuyo

Un enlace entrante

14 Comentarios en “Enviar correo desde Java”

  1. Bett0 dice:

    Buen tuto como todos casidiablo pero tengo unas dudas con respecto de
    props.put(“mail.host”, “mail.servidorcorreo.com”);

    mail.host -> que es especificamente es

    y si es asi en mi caso la creacion del class
    no dio problemas pero al momento de ejcutar el class me salio un error no se si podes indicarme cual es el error
    .

    C:\Downloads>javac -cp mail.jar correo.java

    C:\Downloads>java -cp mail.jar correo
    Exception in thread “main” java.lang.NoClassDefFoundError: correo
    Caused by: java.lang.ClassNotFoundException: correo
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClassInternal(Unknown Source)
    Could not find the main class: correo. Program will exit.

    C:\Downloads>

  2. Cristian dice:

    Hola Bett0.

    Intenta compilarlo y ejecutarlo así:

    javac -cp mail.jar;. correo.java
    java -cp mail.jar;. correo

    Me cuentas ;)

    Un saludo!

  3. Martín dice:

    Buenas. Muy bueno el tutorial. Sería interesante si pudieras indicar cómo especificar la autenticación y los puertos para poder enviar correos utilizando el smtp de gmail por ejemplo.
    Un saludo

  4. Cristian dice:

    Hola Martín… en el caso de necesitar hacerlo con Gmail, tendríamos algo de este tipo:

    // Nombre del host de correo, es smtp.gmail.com
    props.setProperty("mail.smtp.host", "smtp.gmail.com");
    // TLS si está disponible
    props.setProperty("mail.smtp.starttls.enable", "true");
    // Puerto de gmail para envio de correos
    props.setProperty("mail.smtp.port","587");
    // Nombre del usuario
    props.setProperty("mail.smtp.user", "ejemplo@gmail.com");
    // Si requiere o no usuario y password para conectarse.
    props.setProperty("mail.smtp.auth", "true");

    Gracias a chuidiang.com

    Un saludo!

  5. Martín dice:

    ¡Perfecto! Muchas gracias.

  6. frederick dice:

    pana tengo este error :

    javax.mail.MessagingException: Unknown SMTP host: mail.servidorcorreo.com;

    que hago ahi

  7. Cristian dice:

    @frederick debes cambiar “mail.servidorcorreo.com” por un servidor de correo SMTP. Ese es solo un ejemplo ;)

    Un saludo!

  8. ZiTAL dice:

    Que paciencia tienes… sigue así un saludo.

  9. Adan dice:

    Hola, estaba viendo tu blog y vi la forma en la que presentas tu codigo, quisiera saber como esque haces que tome esa apariencia, para explicarme bien, como haces que tu codigo se vea como en el Visual Studio, asi de colores ;) , me podrias compartir ese script por fa

  10. ¿Cómo integro el API Java.Mail? Osea, ¿dónde guardo l carpeta descargada del link que propones?
    Excelente ejemplo. Esto, más o meenos lo hice en C sharp.

  11. kasiko dice:

    muy bueno!!

  12. fermin dice:

    Excelente info no sabia que podria hacerse

    Saludos

  13. Julio dice:

    no sale error pero no aparece el mensaje en mi correo

    import javax.mail.*;
    import javax.mail.internet.*;
    import java.util.*;

    public class EnviarMail {
    public static void main(String[] args) {
    try {
    // Se debe crear un archivo de propiedades que
    // contenga el nombre del servidor SMTP
    Properties props = new Properties();

    // Nombre del host de correo, es smtp.gmail.com
    props.setProperty(“mail.smtp.host”, “smtp.gmail.com”);
    // TLS si está disponible
    props.setProperty(“mail.smtp.starttls.enable”, “true”);
    // Puerto de gmail para envio de correos
    props.setProperty(“mail.smtp.port”,”587″);
    // Nombre del usuario
    props.setProperty(“mail.smtp.user”, “jrbsandoval@gmail.com”);
    // Si requiere o no usuario y password para conectarse.
    props.setProperty(“mail.smtp.auth”, “true”);
    // se crea un objeto de sesion
    Session conexionCorreo = Session.getInstance(props, null);
    // este objeto representa el mensaje a enviar
    Message mensaje = new MimeMessage(conexionCorreo);

    // los objetos Adress contienen informacion de recipientes de correo
    Address desde = new InternetAddress(“jrbsandoval@gmail.com”,
    “Julio Baquero”);
    Address para = new InternetAddress(“jrbsandoval@gmail.com”);

    // asignamos el contenido. En este caso usamos ‘text/plain’ pero
    // es posible usar ‘text/html’ para enviar correos con contenido
    // HTML
    mensaje.setContent(“Este es un mensaje”,
    “text/plain”);
    // asignar el origen del correo
    mensaje.setFrom(desde);
    // asignar un destinatario
    mensaje.setRecipient(Message.RecipientType.TO, para);
    // asignar el asunto del correo
    mensaje.setSubject(“Hola”);

    Transport.send(mensaje);

    } catch (Exception ex) {
    ex.printStackTrace();
    }
    }
    }

¡Déjanos tu comentario!