ForgeTotal.js 5
es

Total.js 5

Envía un correo desde una vista

Total.js 5 · total5@0.0.19 mailsmtpemail Ejecutada con Total.js 5

Total.js envía el correo por SMTP. El servidor y el remitente van en el archivo config: mail_smtp es el servidor, mail_smtp_options un objeto con el resto de ajustes de conexión (port, user, password, secure...) y mail_from / mail_from_name el remitente. mail_reply, mail_cc y mail_bcc añaden esas mismas cabeceras a todos los mensajes.

MAIL(email, subject, view, model, [language], [callback]) renderiza views/view.html con el modelo (las mismas vistas que para las páginas, incluida la localización con @(...)) y envía el resultado como cuerpo HTML. email puede ser una dirección o varias separadas por comas. HTMLMAIL(email, subject, html, [language], [callback]) envía una cadena que has construido tú. Ambas devuelven el mensaje; callback(err) se ejecuta cuando el servidor lo ha aceptado o rechazado, y err es null si todo fue bien.

Los mensajes se ponen en cola y se envían justo después del tick actual, así que MAIL() nunca bloquea la petición. Espera al callback solo cuando el usuario necesite saber si funcionó.

config
name : Mail example
mail_smtp : 127.0.0.1
mail_smtp_options : { port: 2526 }
mail_from : hello@example.com
mail_from_name : Example

La vista se renderiza con el layout, como cualquier página, así que views/layout.html debe existir (si no, la petición falla con un error ENOENT). Un layout de correo puede ser tan pequeño como el de abajo, o puedes usar el layout de tus páginas.

views/layout.html
<!DOCTYPE html>
<html>
<head><meta charset="utf-8" /></head>
<body style="font-family:Arial">@{body}</body>
</html>
views/welcome.html
<h1>Welcome, @{model.name}!</h1>
<p>Your account is ready.</p>
controllers/mail.js
exports.install = function() {
	ROUTE('POST /welcome/ @json', welcome);
	ROUTE('POST /note/ @json', note);
};

function welcome($) {
	MAIL($.body.email, 'Welcome aboard', 'welcome', { name: $.body.name }, function(err) {
		$.json({ sent: !err, error: err ? err.toString() : null });
	});
}

function note($) {
	HTMLMAIL($.body.email, 'A short note', '<p>Plain <b>HTML</b> message</p>', function(err) {
		$.json({ sent: !err, error: err ? err.toString() : null });
	});
}