Enviar correos con JavaMail y Java

De ChuWiki
Saltar a: navegación, buscar

Estos son los pasos básicos para enviar correos con JavaMail y Java. La configuración que aparece en estos ejemplos es para conectarse a una cuenta de gmail.


Establecer la Sesion de JavaMail

Primero hay que obtener una instancia de la clase Session de JavaMail. Para ello se llama al método Session.getDefaultInstance() pasándole unas propiedades para la conexión. El código puede ser como este para una cuenta de gmail.

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", "ejemplo@gmail.com");

// Si requiere o no usuario y password para conectarse.
props.setProperty("mail.smtp.auth", "true");

Session session = Session.getDefaultInstance(props);

// Para obtener un log de salida más extenso
session.setDebug(true);


Construir un mensaje de texto sencillo

Si queremos enviar un mensaje sencillo de texto, simplemente instanciamos la clase MimeMessage. En el constructor se le pasa la Session que acabamos de obtener. Una vez instanciado, rellenamos los campos de interés: from, to, subject, texto, etc.

MimeMessage message = new MimeMessage(session);

// Quien envia el correo
message.setFrom(new InternetAddress("ejemplo@gmail.com"));

// A quien va dirigido
message.addRecipient(Message.RecipientType.TO, new InternetAddress("destinatario@dominio.com"));

message.setSubject("Asunto del mensaje");
message.setText("Texto del mensaje");


Construir un mensaje complejo con adjuntos

Si queremos construir un mensaje complejo con adjuntos, por ejemplo, un texto con una imagen adjunta, debemos construir cada una de las partes y juntarlas todas luego en un solo mensaje.

Primero construimos la parte de texto

BodyPart texto = new MimeBodyPart();

// Texto del mensaje
texto.setText("Texto del mensaje");

Luego construimos la parte del adjunto con la imagen. Suponemos que la tenemos en un fichero

BodyPart adjunto = new MimeBodyPart();

// Cargamos la imagen
adjunto.setDataHandler(new DataHandler(new FileDataSource("d:/futbol.gif")));

// Opcional. De esta forma transmitimos al receptor el nombre original del
// fichero de imagen.
adjunto.setFileName("futbol.gif");

Ahora juntamos ambas en una sola parte que luego debemos añadir al mensaje

MimeMultipart multiParte = new MimeMultipart();
multiParte.addBodyPart(texto);
multiParte.addBodyPart(adjunto);

Finalmente construimos el mensaje, le ponemos este MimeMultiPart como contenido y rellenamos el resto de campos from, to y subject.

MimeMessage message = new MimeMessage(session);

// Se rellena el From
message.setFrom(new InternetAddress("yo@yo.com"));

// Se rellenan los destinatarios
message.addRecipient(Message.RecipientType.TO, new InternetAddress("chuidiang@gmail.com"));

// Se rellena el subject
message.setSubject("Hola");

// Se mete el texto y la foto adjunta.
message.setContent(multiParte);

Enviar el mensaje

Una vez construido el mensaje -el simple o el compuesto con adjunto- lo enviamos. Para ello necesitamos una instancia de la clase Transport. Se hace de la siguiente manera

Transport t = session.getTransport("smtp");

// Aqui usuario y password de gmail
t.connect("chuidiang@gmail.com","la password");
t.sendMessage(message,message.getAllRecipients());
t.close();

Enlaces

Puedes ver todo esto más detallado en: