# Trimite un e-mail dintr-un view

> Configurează SMTP în fișierul config, randează un view ca și corp al mesajului cu MAIL() și trimite HTML gata făcut cu HTMLMAIL().

Framework: total5
Product: Total.js 5 (total5@0.0.19)
Language: ro
Content-SHA256: f986574bb96c38cf181be7656dd55fd0961efda37603951030910c29b2bbe5d7
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: total5-installed@total5@0.0.19
Review: not-recorded

Total.js trimite poșta prin SMTP. Serverul și expeditorul se pun în fișierul `config`: `mail_smtp` este serverul, `mail_smtp_options` un obiect cu restul setărilor de conexiune (`port`, `user`, `password`, `secure`...), iar `mail_from` / `mail_from_name` este expeditorul. `mail_reply`, `mail_cc` și `mail_bcc` adaugă aceleași antete fiecărui mesaj.

`MAIL(email, subject, view, model, [language], [callback])` randează `views/<view>.html` cu modelul (aceleași view-uri ca pentru pagini, inclusiv localizarea cu `@(...)`) și trimite rezultatul ca și corp HTML. `email` poate fi o adresă sau mai multe separate prin virgule. `HTMLMAIL(email, subject, html, [language], [callback])` trimite un șir construit de tine. Ambele returnează mesajul; `callback(err)` rulează când serverul l-a acceptat sau respins, iar `err` este `null` la succes.

Mesajele sunt puse în coadă și trimise imediat după tick-ul curent, deci `MAIL()` nu blochează niciodată cererea. Așteaptă callbackul doar când utilizatorul trebuie să știe dacă a mers.

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

View-ul este randat **cu layout-ul**, ca orice pagină, deci `views/layout.html` trebuie să existe (altfel cererea eșuează cu o eroare `ENOENT`). Un layout pentru e-mail poate fi la fel de mic ca cel de mai jos, sau poți folosi layout-ul paginilor tale.

```html views/layout.html
<!DOCTYPE html>
<html>
<head><meta charset="utf-8" /></head>
<body style="font-family:Arial">@{body}</body>
</html>
```

```html views/welcome.html
<h1>Welcome, @{model.name}!</h1>
<p>Your account is ready.</p>
```

```js 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 });
	});
}
```
