Puede enviar un correo electrónico construido a partir de un mensaje MIME.
Puede transmitir un mensaje MIME al nodo EmailOutput, que utiliza el analizador MIME para escribir el mensaje MIME en una corriente de bits. Este mensaje a continuación se envía a la lista de destinatarios de la EmailOutputHeader. Las alteraciones temporales del entorno local no se tienen en cuenta cuando se pasa un mensaje MIME. No es necesario configurar el nodo EmailOutput en los siguientes ejemplos.
En los siguientes ejemplos se muestra cómo establecer el destinatario, emisor, asunto, servidor SMTP, y la información del cuerpo del mensaje en ESQL (con un nodo Compute) y Java™ (con un nodo JavaCompute).
CREATE FUNCTION Main() RETURNS BOOLEAN
BEGIN
CALL CopyMessageHeaders();
-- Añadir información de destinatario a EmailOutputHeader
SET OutputRoot.EmailOutputHeader.To = '<dirección de correo electrónico del destinatario>';
SET OutputRoot.EmailOutputHeader.Cc = '<dirección de correo electrónico del destinatario>';
SET OutputRoot.EmailOutputHeader.Bcc = '<dirección de correo electrónico del destinatario>';
-- Añadir información de remitente a EmailOutputHeader
SET OutputRoot.EmailOutputHeader.From = '<dirección de correo electrónico del remitente>';
SET OutputRoot.EmailOutputHeader."Reply-To" = '<dirección de correo electrónico de respuesta>';
-- Añadir asunto a EmailOutputHeader
SET OutputRoot.EmailOutputHeader.Subject = 'Mensaje MIME dinámico en ESQL.';
-- Añadir información de servidor SMTP a LocalEnvironment
SET OutputLocalEnvironment.Destination.Email.SMTPServer ='<smtp.server:port>';
-- Crear un nuevo cuerpo de mensaje MIME, que se enviará como el texto principal del mensaje de correo electrónico,
-- incluido un archivo adjunto.
CREATE FIELD OutputRoot.MIME TYPE Name;
DECLARE M REFERENCE TO OutputRoot.MIME;
-- Crear de forma explícita el hijo de MIME Content-Type para garantizar el orden correcto. Si definimos
-- en su lugar la propiedad ContentType, el campo podría aparecer como el último hijo de MIME.
CREATE FIELD M."Content-Type" TYPE NameValue VALUE 'multipart/related; boundary=myBoundary';
CREATE FIELD M."Content-ID" TYPE NameValue VALUE 'nuevo documento MIME';
CREATE LASTCHILD OF M TYPE Name NAME 'Partes';
CREATE LASTCHILD OF M.Parts TYPE Name NAME 'Parte';
DECLARE P1 REFERENCE TO M.Parts.Part;
-- Primera parte:
-- Crear el cuerpo del mensaje de correo electrónico.
-- El cuerpo del correo electrónico tiene el texto 'Cuerpo principal del correo electrónico.'.
CREATE FIELD P1."Content-Type" TYPE NameValue VALUE 'text/plain; charset=us-ascii';
CREATE FIELD P1."Content-Transfer-Encoding" TYPE NameValue VALUE '8 bits';
CREATE LASTCHILD OF P1 TYPE Name NAME 'Datos';
CREATE LASTCHILD OF P1.Data DOMAIN('BLOB') PARSE(CAST('Es el cuerpo principal del mensaje de correo electrónico.'
AS BLOB CCSID 1208));
CREATE LASTCHILD OF M.Parts TYPE Name NAME 'Parte';
DECLARE P2 REFERENCE TO M.Parts.Part[2];
-- Segunda parte:
-- Crear el archivo adjunto de un mensaje de correo electrónico.
-- El archivo adjunto se llama 'attachment.txt' y contiene el texto 'Esto es un archivo adjunto.'.
CREATE FIELD P2."Content-Type" TYPE NameValue VALUE 'text/plain; charset=us-ascii; name=attachment.txt';
CREATE FIELD P2."Content-Transfer-Encoding" TYPE NameValue VALUE '8 bits';
CREATE LASTCHILD OF P2 TYPE Name NAME 'Datos';
CREATE LASTCHILD OF P2.Data DOMAIN('BLOB') PARSE(CAST('Esto es un archivo adjunto.' AS BLOB CCSID 1208));
RETURN TRUE;
END;
public void evaluate(MbMessageAssembly assembly) throws MbException {
MbOutputTerminal out = getOutputTerminal("out");
MbOutputTerminal fail = getOutputTerminal("fail");
// Crear un nuevo conjunto para propagar fuera de este nodo, ya que queremos
// actualizarlo
MbMessage outMessage = new MbMessage();
copyMessageHeaders(assembly.getMessage(), outMessage);
MbMessage outLocalEnv = new MbMessage(assembly.getLocalEnvironment());
MbMessage outExceptionList = new MbMessage(assembly.getExceptionList());
MbMessageAssembly outAssembly = new MbMessageAssembly(assembly, outLocalEnv, outExceptionList, outMessage);
MbElement localEnv = outAssembly.getLocalEnvironment().getRootElement();
// Crear el analizador de EmailOutputHeader. Aquí es donde añadimos la información del destinatario,
// emisor y asunto.
MbElement root = outMessage.getRootElement();
MbElement SMTPOutput = root.createElementAsLastChild("EmailOutputHeader");
// Añadir información de destinatario a EmailOutputHeader
SMTPOutput.createElementAsLastChild(MbElement.TYPE_NAME_VALUE, "A", "<dirección de correo electrónico del destinatario>");
SMTPOutput.createElementAsLastChild(MbElement.TYPE_NAME_VALUE, "Cc", "<dirección de correo electrónico del destinatario>");
SMTPOutput.createElementAsLastChild(MbElement.TYPE_NAME_VALUE, "Cco", "<dirección de correo electrónico del destinatario>");
// Añadir información de remitente a EmailOutputHeader
SMTPOutput.createElementAsLastChild(MbElement.TYPE_NAME_VALUE, "De", "<dirección de correo electrónico del remitente>");
SMTPOutput.createElementAsLastChild(MbElement.TYPE_NAME_VALUE, "Responder a", "<dirección de correo electrónico de respuesta>");
// Añadir información de asunto a EmailOutputHeader
SMTPOutput.createElementAsLastChild(MbElement.TYPE_NAME_VALUE, "Asunto", "Mensaje MIME dinámico en Java.");
// Crear Destination.Email. Aquí es donde añadimos la información del servidor SMTP.
MbElement Destination = localEnv.createElementAsLastChild(MbElement.TYPE_NAME, "Destino", null);
MbElement destinationEmail = Destination.createElementAsLastChild(MbElement.TYPE_NAME, "Correo electrónico", null);
destinationEmail.createElementAsLastChild(MbElement.TYPE_NAME_VALUE, "Servidor SMTP", "<smtp.server:port>");
// Establecer el último hijo de la raíz (cuerpo del mensaje) como MIME.
MbElement MIME = root.createElementAsLastChild("MIME");
// Crear de forma explícita el hijo de MIME Content-Type para garantizar el orden correcto.
MIME.createElementAsLastChild(MbElement.TYPE_NAME_VALUE, "Content-Type", "multipart/related;
boundary=myBoundary");
MIME.createElementAsLastChild(MbElement.TYPE_NAME_VALUE, "Content-ID", "nuevo documento MIME");
MbElement parts = MIME.createElementAsLastChild(MbElement.TYPE_NAME, "Partes", null);
MbElement part, data, blob;
String text;
// Primera parte:
// Crear el cuerpo del mensaje de correo electrónico.
// El cuerpo del correo electrónico tiene el texto 'Cuerpo principal del correo electrónico.'.
part = parts.createElementAsLastChild(MbElement.TYPE_NAME, "Parte", null);
part.createElementAsLastChild(MbElement.TYPE_NAME_VALUE, "Content-Type", "text/plain; charset=us-ascii");
part.createElementAsLastChild(MbElement.TYPE_NAME_VALUE, "Content-Transfer-Encoding", "8 bits");
data = part.createElementAsLastChild(MbElement.TYPE_NAME, "Datos", null);
blob = data.createElementAsLastChild("BLOB");
text = "Es el cuerpo principal del mensaje de correo electrónico.";
try {
blob.createElementAsLastChild(MbElement.TYPE_NAME_VALUE, "BLOB", text.getBytes("UTF8"));
} catch (UnsupportedEncodingException e) {
fail.propagate(outAssembly);
}
// Segunda parte:
// Crear el archivo adjunto del mensaje de correo electrónico.
// El archivo adjunto se llama 'attachment.txt' y contiene el texto 'Esto es un archivo adjunto.'.
part = parts.createElementAsLastChild(MbElement.TYPE_NAME, "Parte", null);
part.createElementAsLastChild(MbElement.TYPE_NAME_VALUE, "Content-Type", "text/plain; charset=us-ascii;
name=attachment.txt");
part.createElementAsLastChild(MbElement.TYPE_NAME_VALUE, "Content-Transfer-Encoding", "8 bits");
data = part.createElementAsLastChild(MbElement.TYPE_NAME, "Datos", null);
blob = data.createElementAsLastChild("BLOB");
text = "Es un archivo adjunto.";
try {
blob.createElementAsLastChild(MbElement.TYPE_NAME_VALUE, "BLOB", text.getBytes("UTF8"));
} catch (UnsupportedEncodingException e) {
fail.propagate(outAssembly);
}
outMessage.finalizeMessage(MbMessage.FINALIZE_VALIDATE);
out.propagate(outAssembly);
}