Enviar um e-mail a partir de uma vista
O Total.js envia correio por SMTP. O servidor e o remetente vão no ficheiro config: mail_smtp é o servidor, mail_smtp_options um objeto com o resto das definições de ligação (port, user, password, secure...) e mail_from / mail_from_name o remetente. mail_reply, mail_cc e mail_bcc acrescentam esses mesmos cabeçalhos a todas as mensagens.
MAIL(email, subject, view, model, [language], [callback]) renderiza views/view.html com o modelo (as mesmas vistas das páginas, incluindo a localização com @(...)) e envia o resultado como corpo HTML. email pode ser um endereço ou vários separados por vírgulas. HTMLMAIL(email, subject, html, [language], [callback]) envia uma string que construiu você. Ambas devolvem a mensagem; callback(err) corre quando o servidor a aceitou ou rejeitou, e err é null se correu bem.
As mensagens são postas em fila e enviadas logo depois do tick atual, por isso MAIL() nunca bloqueia o pedido. Espere pelo callback apenas quando o utilizador precisa de saber se funcionou.
name : Mail example
mail_smtp : 127.0.0.1
mail_smtp_options : { port: 2526 }
mail_from : hello@example.com
mail_from_name : ExampleA vista é renderizada com o layout, como qualquer página, por isso views/layout.html tem de existir (caso contrário o pedido falha com um erro ENOENT). Um layout de e-mail pode ser tão pequeno como o de baixo, ou pode usar o layout das suas páginas.
<!DOCTYPE html>
<html>
<head><meta charset="utf-8" /></head>
<body style="font-family:Arial">@{body}</body>
</html><h1>Welcome, @{model.name}!</h1>
<p>Your account is ready.</p>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 });
});
}