Enviar correo electrónico desde una aplicación

PEDRO DELGADO YARZA 2014/02/28 14:23

Si queremos enviar correos electrónicos desde nuestra aplicación web podemos hacerlo usando las librerías que contiene Fundeweb 2.0 para ello.

:!: Antes de seguir léete la normativa para Componer un mensaje de correo sin generar spam y también Servicio de Correo de Pruebas para el Entorno de Desarrollo/Test

La clase encargada de realizar el envío de correos debe extender de: org.jboss.seam.framework.Controller para heredar parte de los métodos necesario para el envío de correos. Al mismo tiempo se tendrá que hacer uso de la clase javax.mail.Session para realizar el envío de los mismos.

Las variables que debemos tener en cuenta a la hora de realizar el envío del correo son:

  • from: Email de quien envía el correo electrónico.
  • password: Contraseña de acceso de quien envía el correo electrónico.
  • to: Email del destinatario del correo electrónico.
  • titulo: Título del mensaje del correo electrónico.
  • textoMensaje: Texto del cuerpo del correo electrónico.
  • datos: Bytes del fichero que se desee adjuntar.
  • contentType: Tipo de datos del fichero que ha adjuntado.
  • nombreFichero: Nombre del fichero de datos del fichero que ha adjuntado.

A parte de estas variables hay que añadir a la aplicación el servidor smtp sobre el cual queremos actuar, en nuestro caso es smtp.um.es.

Una vez comprendido los conceptos esenciales de lo que hace falta para enviar un correo electrónico. Debemos definir un fichero xhtml que será la plantilla del correo electrónico que mandemos. Un ejemplo de ese fichero es este:

Para Fundeweb 1.2.x

<?xml version="1.0" encoding="ISO-8859-1"?>
<m:message xmlns="http://www.w3.org/1999/xhtml"
    xmlns:m="http://jboss.com/products/seam/mail"
    xmlns:h="http://java.sun.com/jsf/html"
    charset="UTF-8">
 
    <m:from address="#{generadorEmail.from}" />
    <m:to address="#{generadorEmail.to}" />
    <m:subject><h:outputText value="#{generadorEmail.titulo}" /></m:subject>
 
    <m:attachment value="#{generadorEmail.datos}" contentType="#{generadorEmail.contentType}" 
    	fileName="#{generadorEmail.nombreFichero}" />
 
    <m:body>
        <p><h:outputText value="#{generadorEmail.texto}" /></p>
    </m:body>
 
</m:message>

Para Fundeweb 2.x

<?xml version="1.0" encoding="ISO-8859-1"?>
<m:message xmlns="http://www.w3.org/1999/xhtml"
           xmlns:m="http://jboss.org/schema/seam/mail"
           xmlns:h="http://java.sun.com/jsf/html" charset="UTF-8">
 
    <m:from address="#{generadorEmail.from}" />
    <m:to address="#{generadorEmail.to}" />
    <m:subject><h:outputText value="#{generadorEmail.titulo}" /></m:subject>
 
    <m:attachment value="#{generadorEmail.datos}" contentType="#{generadorEmail.contentType}" 
    	fileName="#{generadorEmail.nombreFichero}" />
 
    <m:body>
        <p><h:outputText value="#{generadorEmail.texto}" /></p>
    </m:body>
 
</m:message>

Este ejemplo contempla un fichero adjunto, a parte de los datos básicos anteriormente mencionados.

Tras preparar la plantilla tendremos que lanzarla desde nuestro código Java cuando el usuario quiera mandar el email:

@Name("generadorEmail")
public class GeneradorEmailextends Controller{
 
	private static final long serialVersionUID = -5322774514121017558L;
 
	@In
	private Session mailSession;
 
	@Logger
	Log log;
 
	private String password;
	private String from;
	private String texto;
	private String titulo;
	private String to;
 
	public GeneradorEmail() {
	}
 
	public void enviarEmail() {
		try {
                        //Creamos la url del servidor smpt
			URLName url = new URLName("smtp://@smtp.um.es");
                        // Creamos la sesión de correo para la url indicada pasandoe l password del usuario
			mailSession.setPasswordAuthentication(url,
					new PasswordAuthentication(this.from, this.password));
                        //Invocamos al motor de seam que "pite" la plantilla lo cual causará el envío del correo.
			render("/paginas/plantillaEmail.xhtml");
 
		} catch (Exception ex) {
			log.error("error", ex);
		}
	}	
 
   ...
   ...
}

Definir el servidor en los filtros Este paso no es necesario en las últimas versiones del arquetipo, es solamente para aplicaciones más antiguas.

En el components.properties añadimos si no está:

   #smtp
   smtp.um.es=${smtp.um.es}
   smtp.um.es.tls=${smtp.um.es.tls}

En filtro-local.properties, filtro-desarrollo.properties y filtro-preproduccion.properties añadimos si no está:

   #smtp
   smtp.um.es=smtp-desarrollo.um.es
   smtp.um.es.tls=false

En filtro-produccion.properties añadimos si no está:

   #smtp
   smtp.um.es=smtp.um.es
   smtp.um.es.tls=true
  • fdw2.0/fundeweb2.0/gt/como_envio_correo_electronico_desde_una_aplicacion.txt
  • Última modificación: 07/06/2024 10:21
  • por MARIANO Array