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

21 Comentarios | deja el tuyo

2 enlaces entrantes

19 Comentarios en “Enviar correo desde Java”

  1. Daniel Aristizabal dice:

    Brother tengo lo siguiente…pero no me envia el mail al correo

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

    public class MailSender {
    public static void main() {
    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”);
    // 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”, “sdao32@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(“sdao32@gmail.com”,
    “Pepito Perez”);
    Address para = new InternetAddress(“sdao32@hotmail.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();
    }
    }
    }

    Help please!!!

  2. sub7 dice:

    Buenas, ami me da el siguiente error:

    javax.mail.MessagingException: Can’t send command to SMTP host;
    nested exception is:
    java.net.SocketException: Connection closed by remote host
    at com.sun.mail.smtp.SMTPTransport.sendCommand(SMTPTransport.java:1878)
    at com.sun.mail.smtp.SMTPTransport.sendCommand(SMTPTransport.java:1865)
    at com.sun.mail.smtp.SMTPTransport.close(SMTPTransport.java:973)
    at javax.mail.Transport.send0(Transport.java:193)
    at javax.mail.Transport.send(Transport.java:120)
    at enviaremail.Principal.main(Principal.java:40)
    Caused by: java.net.SocketException: Connection closed by remote host
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.checkWrite(SSLSocketImpl.java:1307)
    at com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:43)
    at com.sun.mail.util.TraceOutputStream.write(TraceOutputStream.java:110)
    at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)
    at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123)
    at com.sun.mail.smtp.SMTPTransport.sendCommand(SMTPTransport.java:1876)
    … 5 more
    GENERACIÓN CORRECTA (total time: 3 seconds)

    El codigo es el siguiente:
    package enviaremail;

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

    public class Principal {
    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”, “smtp.live.com”);
    props.setProperty(“mail.smtp.host”, “smtp.live.com”);
    props.put(“mail.smtp.port”, “25″);
    props.setProperty(“mail.smtp.starttls.enable”, “true”);
    props.setProperty(“mail.smtp.user”, “dj_bass_88@hotmail.com”);
    props.setProperty(“mail.smtp.pass”, “xxxxxx”);

    // 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(“dj_bass_88@hotmail.com”,”Juanjo Gomez”);
    Address para = new InternetAddress(“dj_bass_88@hotmail.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();
    }
    }
    }

  3. sub7 dice:

    Buenas, despues de un rato… con este código a mi me funciona perfectamente.

    package enviaremail;

    import java.util.Properties;
    import javax.mail.Message;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;

    public class Principal {
    public static void main(String[] args) {
    try {
    Properties props = new Properties();
    props.setProperty(“mail.smtp.host”, “smtp.live.com”);
    props.setProperty(“mail.smtp.starttls.enable”, “true”);
    props.setProperty(“mail.smtp.port”, “25″);
    props.setProperty(“mail.smtp.user”, “dj_bass_88@hotmail.com”);
    props.setProperty(“mail.smtp.auth”, “true”);

    System.out.println(“Enviando…”);
    // Preparamos la sesion
    Session session = Session.getDefaultInstance(props);

    // Construimos el mensaje
    MimeMessage message = new MimeMessage(session);
    message.setFrom(new InternetAddress(“dj_bass_88@hotmail.com”));
    message.addRecipient(
    Message.RecipientType.TO,
    new InternetAddress(“admin@acrosssound.com”));
    message.setSubject(“Prueba”);
    message.setText(“Esto es una prueba…”);

    // Lo enviamos.
    Transport t = session.getTransport(“smtp”);
    t.connect(“dj_bass_88@hotmail.com”, “password”);
    t.sendMessage(message, message.getAllRecipients());

    // Cierre.
    t.close();

    System.out.println(“\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nEmail Enviado!”);
    }
    catch (Exception e)
    {
    e.printStackTrace();
    }
    }
    }

¡Déjanos tu comentario!