Cómo enviar correos electrónicos en eventos
IMPORTANTE: ESTA ES UNA VERSIÓN BETA
Esta página está en desarrollo activo y puede contener funcionalidades inestables o incompletas. Úsela bajo su propia responsabilidad.
Visión general
Etendo proporciona un mecanismo que permite generar eventos de forma programática para enviar correos electrónicos. El disparo de eventos y la implementación del correo electrónico están desacoplados, siendo posible lanzar eventos genéricos, que son escuchados por otros módulos que implementan el contenido del correo electrónico.
Este procedimiento explica ambas cosas: cómo disparar los eventos y cómo escucharlos para generar el evento.
El servidor de correo electrónico está configurado a nivel de cliente.
Disparo de eventos de correo electrónico
Un evento se identifica simplemente mediante un String.
Los eventos se disparan de forma programática desde cualquier parte del código, como Procesos o Manejadores de eventos de negocio.
Para disparar un evento necesita:
Inyectar en su clase un EmailEventManager
Usar este gestor para crear los eventos:
try {
boolean sent = emailManager.sendEmail("EVT_NAME", "user1@test.abc; user2@test.abc", data);
if (sent) {
// email was sent
} else {
// email was not sent
}
} catch (EmailEventException e) {
// something went wrong...
}
El primer parámetro es el nombre del evento que identifica el evento. El segundo es la lista de destinatarios, separada por punto y coma (;) si hay más de uno. Y, por último, cualquier Object con los datos que se utilizarán para generar el evento. Tenga en cuenta que, aunque estos datos sean algo genérico (Object), el tipo real que el listener esperará puede variar dependiendo del evento.
Escucha de eventos de correo electrónico
Los eventos de correo electrónico son escuchados por clases que implementan EmailEventContentGenerator.
Para escuchar un evento, necesita crear una clase de EmailEventContentGenerator:
public class MyEmailGenerator implements EmailEventContentGenerator {
@Override
public boolean isValidEvent(String event, Object data) {
return "EVT_NAME".equals(event);
}
@Override
public String getSubject(Object data, String event) {
return "New email for you";
}
@SuppressWarnings("unchecked")
@Override
public String getBody(Object data, String event) {
User usr = (User) data;
return "Hello " + usr.getFirstName();
}
@Override
public String getContentType() {
return "text/plain; charset=utf-8";
}
...
}
Vamos a explicar los principales métodos a implementar (hay algunos otros explicados en el javadoc):
-
isValidEvent: Determina si nuestra clase escucha el evento. Internamente, el emailManager itera sobre todas las clasesEmailEventContentGeneratorejecutando este método; se intenta enviar el correo electrónico en caso de que devuelvatrue. Siguiendo nuestro ejemplo, el nombre del evento que enviamos antes eraEVT_NAME, por lo que devolvemostruepara este evento yfalsepara cualquier otro. Tenga en cuenta que una única clase podría escuchar varios eventos. -
getSubject: Devuelve unStringcon el asunto del correo electrónico. También recibe los datos, por lo que este asunto puede ser diferente en función de ellos. -
getBody: Devuelve unStringcon el cuerpo del correo electrónico. También recibe los datos, por lo que este cuerpo puede ser diferente en función de ellos. En este ejemplo, esperamos que los datos sean un Usuario, por lo que podemos hacer el cast para generar el cuerpo en función de sus atributos.
Cuerpos más avanzados pueden componerse usando plantillas freemarker; de este modo es posible que otro módulo sobrescriba la plantilla sin necesidad de realizar ningún desarrollo en Java. En este cómo, se explica cómo pueden crearse las plantillas.
Este trabajo es una obra derivada de Cómo enviar correos electrónicos en eventos de Openbravo Wiki, utilizada bajo CC BY-SA 2.5 ES. Esta obra está licenciada bajo CC BY-SA 2.5 por Etendo.