mirror of
https://github.com/mailscope/kumomta.git
synced 2026-08-19 02:48:18 +00:00
115 lines
3.3 KiB
Markdown
115 lines
3.3 KiB
Markdown
---
|
|
tags:
|
|
- templates
|
|
---
|
|
|
|
# kumo.string.eval_template
|
|
|
|
```lua
|
|
kumo.string.eval_template(NAME, SOURCE, CONTEXT, OPT_DIALECT)
|
|
```
|
|
|
|
{{since('2025.03.19-1d3f1f67')}}
|
|
|
|
Evaluates a minijinja template.
|
|
|
|
The parameters are:
|
|
|
|
* `NAME` - the nominal "file name" for the template. No actual file I/O is
|
|
performed; this parameter tells the template engine what the filename would
|
|
have been if it were loaded from disk. The filename is used to decide what
|
|
strategy should be used for automatic output escaping. For example, if the
|
|
name ends with `.json` or `.html` then appropriate json or html entity
|
|
escaping will automatically be applied to the output.
|
|
* `SOURCE` - the template source code. This must follow the [template syntax](../template/index.md).
|
|
* `CONTEXT` - an object that defines the variables that are available to the template engine.
|
|
|
|
```lua
|
|
-- This will print `"John"`
|
|
print(
|
|
kumo.string.eval_template('example.json', [[{{name}}]], { name = 'John' })
|
|
)
|
|
```
|
|
|
|
|
|
```lua
|
|
local kumo = require 'kumo'
|
|
|
|
local log_record = kumo.serde.json_parse [=[
|
|
{
|
|
"type": "Delivery",
|
|
"id": "1d98076abbbc11ed940250ebf67f93bd",
|
|
"sender": "user@sender.example.com",
|
|
"recipient": "user@recipient.example.com",
|
|
"queue": "campaign:tenant@domain",
|
|
"site": "source2->(alt1|alt2|alt3|alt4)?.gmail-smtp-in.l.google.com.",
|
|
"size": 1047,
|
|
"response": {
|
|
"code": 250,
|
|
"enhanced_code": {
|
|
"class": 2,
|
|
"subject": 0,
|
|
"detail": 0
|
|
},
|
|
"content": "OK ids=8a5475ccbbc611eda12250ebf67f93bd",
|
|
"command": "."
|
|
},
|
|
"peer_address": {
|
|
"name": "gmail-smtp-in.l.google.com.",
|
|
"addr": "142.251.2.27"
|
|
},
|
|
"timestamp": 1678069691,
|
|
"created": 1678069691,
|
|
"num_attempts": 0,
|
|
"bounce_classification": "Uncategorized",
|
|
"egress_pool": "pool0",
|
|
"egress_source": "source2",
|
|
"source_address": {
|
|
"address": "10.0.0.1:53210",
|
|
"protocol": "socks5",
|
|
"server": "192.168.1.1:5000"
|
|
},
|
|
"feedback_report": null,
|
|
"meta": {},
|
|
"headers": {},
|
|
"delivery_protocol": "ESMTP",
|
|
"reception_protocol": "ESMTP",
|
|
"bogus": null,
|
|
"nodeid": "557f3ad4-2c8c-11ee-976e-782d7e12e173",
|
|
"tls_cipher": "TLS_AES_256_GCM_SHA384",
|
|
"tls_protocol_version": "TLSv1.3",
|
|
"tls_peer_subject_name": ["C=US","ST=CA","L=SanFrancisco","O=Fort-Funston",
|
|
"OU=MyOrganizationalUnit","CN=do.havedane.net",
|
|
"name=EasyRSA","emailAddress=me@myhost.mydomain"],
|
|
"session_id": "9bcd689e-23d9-41b7-a015-63a1382f8b57"
|
|
}
|
|
]=]
|
|
|
|
print(kumo.string.eval_template(
|
|
'log.json',
|
|
[[{
|
|
{%- for key, value in log_record | items | reject("none") -%}
|
|
{{key}}: {{value }}
|
|
{%- if not loop.last %},{% endif %}
|
|
{%- endfor -%}
|
|
}
|
|
]],
|
|
{ log_record = log_record }
|
|
))
|
|
```
|
|
|
|
## Template Dialect
|
|
|
|
{{since('2025.12.02-67ee9e96')}}
|
|
|
|
It is now possible to specify which template engine will be
|
|
used for template expansion via the `OPT_DIALECT` parameter.
|
|
It can have one of the following values:
|
|
|
|
* `Jinja` - this is the implied default. The Mini Jinja
|
|
template dialect will be parsed and evaluated.
|
|
* `Static` - The content is treated as a static string and
|
|
no template expansion will be performed
|
|
* `Handlebars` - The content will be evaluated by a handlebars
|
|
compatible template engine.
|