# Envoyer un e-mail à partir d'une vue

> Configurez SMTP dans le fichier config, rendez une vue comme corps du message avec MAIL(), et envoyez du HTML déjà prêt avec HTMLMAIL().

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

Total.js envoie le courrier par SMTP. Le serveur et l'expéditeur se règlent dans le fichier `config` : `mail_smtp` est le serveur, `mail_smtp_options` un objet avec le reste des réglages de connexion (`port`, `user`, `password`, `secure`...) et `mail_from` / `mail_from_name` l'expéditeur. `mail_reply`, `mail_cc` et `mail_bcc` ajoutent ces mêmes en-têtes à chaque message.

`MAIL(email, subject, view, model, [language], [callback])` rend `views/<view>.html` avec le modèle (les mêmes vues que pour les pages, y compris la localisation `@(...)`) et envoie le résultat comme corps HTML. `email` peut être une adresse ou plusieurs séparées par des virgules. `HTMLMAIL(email, subject, html, [language], [callback])` envoie une chaîne que vous avez construite vous-même. Les deux renvoient le message ; `callback(err)` s'exécute quand le serveur l'a accepté ou refusé, et `err` vaut `null` en cas de succès.

Les messages sont mis en file d'attente et envoyés juste après le tick courant, donc `MAIL()` ne bloque jamais la requête. N'attendez le callback que lorsque l'utilisateur doit savoir si cela a fonctionné.

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

La vue est rendue **avec le layout**, comme n'importe quelle page, donc `views/layout.html` doit exister (sinon la requête échoue avec une erreur `ENOENT`). Un layout de courrier peut être aussi petit que celui ci-dessous, ou vous pouvez utiliser le layout de vos pages.

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