# Een e-mail versturen vanuit een view

> Configureer SMTP in het bestand config, render een view als berichttekst met MAIL() en verstuur kant-en-klare HTML met HTMLMAIL().

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

Total.js verstuurt e-mail via SMTP. De server en de afzender staan in het bestand `config`: `mail_smtp` is de server, `mail_smtp_options` een object met de rest van de verbindingsinstellingen (`port`, `user`, `password`, `secure`...) en `mail_from` / `mail_from_name` de afzender. `mail_reply`, `mail_cc` en `mail_bcc` voegen dezelfde headers toe aan elk bericht.

`MAIL(email, subject, view, model, [language], [callback])` rendert `views/<view>.html` met het model (dezelfde views als voor pagina's, inclusief lokalisatie met `@(...)`) en verstuurt het resultaat als HTML-body. `email` kan één adres zijn of meerdere gescheiden door komma's. `HTMLMAIL(email, subject, html, [language], [callback])` verstuurt een tekenreeks die je zelf hebt gebouwd. Beide geven het bericht terug; `callback(err)` draait wanneer de server het heeft geaccepteerd of geweigerd, en `err` is `null` bij succes.

Berichten worden in een wachtrij geplaatst en direct na de huidige tick verstuurd, dus `MAIL()` blokkeert het verzoek nooit. Wacht alleen op de callback als de gebruiker moet weten of het gelukt is.

```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
```

De view wordt **met de layout** gerenderd, zoals elke pagina, dus `views/layout.html` moet bestaan (anders mislukt het verzoek met een `ENOENT`-fout). Een maillayout kan zo klein zijn als die hieronder, of je gebruikt de layout van je pagina's.

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