# E-mail küldése egy view-ból

> Állítsd be az SMTP-t a config fájlban, renderelj egy view-t levéltörzsként a MAIL()-lel, és küldj kész HTML-t a HTMLMAIL()-lel.

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

A Total.js SMTP-n küld levelet. A szerver és a feladó a `config` fájlba kerül: a `mail_smtp` a szerver, a `mail_smtp_options` egy objektum a kapcsolat többi beállításával (`port`, `user`, `password`, `secure`...), a `mail_from` / `mail_from_name` pedig a feladó. A `mail_reply`, `mail_cc` és `mail_bcc` ugyanezeket a fejléceket adja hozzá minden üzenethez.

A `MAIL(email, subject, view, model, [language], [callback])` a modellel rendereli a `views/<view>.html` fájlt (ugyanazok a view-k, mint az oldalaknál, a `@(...)` lokalizációval együtt), és az eredményt HTML törzsként küldi. Az `email` lehet egy cím vagy több, vesszővel elválasztva. A `HTMLMAIL(email, subject, html, [language], [callback])` egy általad összeállított szöveget küld. Mindkettő az üzenetet adja vissza; a `callback(err)` akkor fut, amikor a szerver elfogadta vagy elutasította, és az `err` sikerkor `null`.

Az üzenetek sorba kerülnek, és közvetlenül az aktuális tick után mennek ki, így a `MAIL()` sosem blokkolja a kérést. A callbackre csak akkor várj, ha a felhasználónak tudnia kell, sikerült-e.

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

A view-t **a layouttal együtt** rendereli, mint bármely oldalt, ezért a `views/layout.html`-nek léteznie kell (különben a kérés `ENOENT` hibával elbukik). Egy levél-layout lehet olyan kicsi, mint az alábbi, vagy használhatod az oldalaid layoutját.

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