# `email.template_not_allowed`

Template does more than read fields, translate and format.

Area 16, [Built-in services](../topics/built-in-services.md); not declinable; the next step is usually the agent's.

A template reads its email's fields, translates and formats; whatever
else an email says is worked out where it is emitted, and given to it as
a field, so its words are reviewed in one place:




```jadpo
<h1>WELCOME, {{ text.upper(name) }}</h1>
```

```text
error: A template only reads its fields, translates and formats
 --> domains/accounts/emails/welcome_email.html:1:17
  |
1 | <h1>WELCOME, {{ text.upper(name) }}</h1>
  |                 ^^^^^^^^^^^^^^^^ a call
  reason: Templates are strict: they read their email's fields, call translations and `text.format`, compare values in `{{ if }}` and walk lists with `{{ for }}`, so what an email says is decided where it is emitted, and a reviewer reads its words in one place.
  next: Call only `translations.<domain>.<message>(...)` and `text.format(...)`; work anything else out where the email is emitted, and give it to the email as a field (agent)
  rule: email.template_not_allowed
  help: https://jadpo.dev/docs/errors/email.template_not_allowed

check failed: 1 error, 3 files
```
