Introducción
Es común el problema de enviar uno o varios mail desde una aplicación Java (SE o EE). Ejemplos de estos pueden ser que nuestro sistema tenga manejo de alarmas, notificaciones especiales, promociones u otras.
Este pequeño apartado muestra como utilizar el paquete javax.mail desde una aplicación JEE. Este paquete es parte de la especificación J2EE, no viene con J2SE.
Antes de comenzar se necesitaría bajar la biblioteca .jar que contiene el javamail. La url de acceso es:
http://java.sun.com/products/javamail/index.html
Luego se debe colocar la biblioteca en el classpath de la aplicación Web a desarrollar.
El jar "mail.jar" tiene diversas funcionalidades, aparte de enviar e-mail. Si quieren ver todos los servicios que ofrece acceder a: http://java.sun.com/j2ee/sdk_1.3/techdocs/api/
Ejemplo básico
Primero necesitamos definir un conjunto de propiedades que la librería utilizará para enviar los mail. Esta información puede ser el servidor SMTP entre otras.
Properties p = new Properties();
p.put("mail.host", "smtp.juguy.org");
Este esquema permiten definir distintas propiedades a diferentes sesiones de mail. Modificando estas propiedades modifico el envío de mail sin necesidad de tocar la API o clases generadas. Un manejo un poco mas sofisticado es levantar estas propiedades de un archivo .properties o similar.
En este momento es necesario crear la sesión con las propiedades indicadas.
Session session = Session.getInstance(p, null);
MimeMessage msg = new MimeMessage(session);
El segundo argumento del metodo que genera la sesión es "null". Esto se debe a que el servidor smtp no precisa autentificación para enviar mail. En caso de que no se así debemos pasar un argumento del tipo java.mail.Authenticator.
Una vez que generamos la sesión, creamos un mensaje a enviar. Como argumento de entrada tiene la sesión que generamos anteriormente. Ahora deberíamos asociar los parámetros del mensaje y por último enviarlo.
try {
// "de" y "para"
msg.setFrom(new InternetAddress("
Esta dirección de correo electrónico está protegida contra los robots de spam, necesita tener Javascript activado para poder verla
"));
msg.setRecipient(Message.RecipientType.TO, new InternetAddress("
Esta dirección de correo electrónico está protegida contra los robots de spam, necesita tener Javascript activado para poder verla
"));
// fecha de envío
msg.setSentDate(new Date());
msg.setSubject("informacion al grupo ");
msg.setText("body del mensaje ");
// intento enviar el mensaje
Transport.send(msg);
}
catch (AddressException e) {
// error al enviar
}
catch (MessagingException e) {
// error al enviar
}
Como se puede ver con pocas líneas de código puedo enviar un mail. El "from" y "Recipient" utilizan la clase javax.mail.internet.InternetAddress.
Si escribo mal la dirección del e-mail de destino se lanza una excepción noficiando el error del envío.
Conclusión
Este apartado muestra el ejemplo más simple de javamail, existen componentes de internacionalización, encodings, mensajes con adjuntos, u otros detalles de envío complejo. Si se quiere hacer referencia a algunos de ellos consultar la API antes mencionada de javamail.
Un comentario final sobre el envío de mail ... ojo con el SPAM. si enviamos muchos correos de notificación desde direcciones de nuestra empresa, corremos grave peligro de quedar en alguna "black list" o filtro de spam ... OJO !
Suerte con el envío de mail, cualquier consulta que tengan envíen mail a:
Esta dirección de correo electrónico está protegida contra los robots de spam, necesita tener Javascript activado para poder verla
Saludos a todos, Martin |