MJML (alfaverze)
Validujte a vykreslujte MJML a načtěte referenci MJML. V alfaverzi, otevřené jen týmu Emailitu.
Validace MJML
Zkontroluje MJML stejně jako uložení šablony (syntaxi XML, strukturu MJML, typy atributů a syntaxi Temple) a zkompiluje ho pomocí MJML 5.4.1. Nic se neuloží. Neplatné MJML i tak vrací 200, s valid: false a diagnostickými hlášeními. Vyžaduje oprávnění full.
Co jednotlivé kontroly pokrývají, najdete v části Validace.
/mjml/validateParametry v těle požadavku
sourcestring | objectPovinnéMJML ke kontrole: značkování MJML (<mjml>…</mjml>), MJML JSON nebo dokument MJML Emailitu, například uložený source šablony. Viz Formáty zdroje. Nejvýše 2 MB.
Odpověď
Vrací 200 OK s výsledkem, i když je MJML neplatné:
| Pole | Typ | Popis |
|---|---|---|
valid |
boolean | true, když nejsou žádná chybová hlášení, takže šablonu s tímto zdrojem lze uložit. |
mjml_version |
string | Verze MJML, se kterou Emailit kompiluje. |
format |
string nebo null | Jak se zdroj přečetl: markup, nebo json. null, když ho nešlo přečíst. |
diagnostics |
array | Všechna hlášení typu chyba, varování a informace. |
valid: true znamená, že šablona s tímto zdrojem by se přijala. Opravte i varování: obvykle upozorňují na skutečné problémy, například chybějící <mj-title>. HTML získáte endpointem Vykreslení MJML.
Pokud source chybí nebo je prázdný, vrací 422 s message: "Validation failed", a bez přístupu k MJML vrací 403 s error: "mjml_alpha".
Objekt hlášení
Pole, která se hlášení netýkají, se vynechávají.
| Pole | Typ | Popis |
|---|---|---|
severity |
string | error, warning nebo info. Hodnotu valid změní na false jen chyby. |
code |
string | Stálý kód, například mjml.invalid-child, xml.unclosed-tag nebo temple.unclosed-if. Viz Kódy hlášení. |
message |
string | Čitelné vysvětlení. |
line |
integer | Řádek ve značkování, číslovaný od 1. Jen u zdrojů ve značkování. |
column |
integer | Sloupec ve značkování, číslovaný od 1. Jen u zdrojů ve značkování. |
tag |
string | Prvek, kterého se hlášení týká. |
attribute |
string | Atribut, kterého se hlášení týká. |
path |
integer[] | Cesta indexů potomků od kořene <mjml>. |
{
"valid": false,
"mjml_version": "5.4.1",
"format": "markup",
"diagnostics": [
{
"severity": "error",
"code": "mjml.invalid-child",
"message": "<mj-column> cannot be placed inside <mj-body>. Allowed parents: <mj-group>, <mj-section>.",
"line": 3,
"column": 6,
"tag": "mj-column",
"path": [0, 0]
},
{
"severity": "error",
"code": "mjml.unknown-attribute",
"message": "<mj-text> has no attribute colour. Did you mean color?",
"line": 4,
"column": 16,
"tag": "mj-text",
"attribute": "colour",
"path": [0, 0, 0]
},
{
"severity": "warning",
"code": "mjml.missing-title",
"message": "Add an <mj-title> to <mj-head>; clients and screen readers use it.",
"line": 1,
"column": 2,
"tag": "mjml",
"path": []
},
{
"severity": "info",
"code": "mjml.missing-preview",
"message": "Add an <mj-preview> to control the inbox preview text.",
"line": 1,
"column": 2,
"tag": "mjml",
"path": []
}
]
}{
"valid": true,
"mjml_version": "5.4.1",
"format": "markup",
"diagnostics": []
}{
"valid": false,
"mjml_version": "5.4.1",
"format": null,
"diagnostics": [
{
"severity": "error",
"code": "document.unrecognized",
"message": "Expected MJML markup (<mjml>…), MJML JSON or an Emailit MJML document."
}
]
}{
"message": "Validation failed",
"errors": {
"source": ["The source field is required."]
}
}{
"error": "mjml_alpha",
"message": "MJML is in alpha and available only to Emailit platform admins."
}Vykreslení MJML
Zkompiluje MJML pomocí MJML 5.4.1 do HTML, které Emailit odesílá. S variables obsahuje odpověď také rendered_html: HTML po zpracování jazykem Temple, jak by ho dostal jeden příjemce. Nic se neuloží ani neodešle. Vyžaduje oprávnění full.
Tento endpoint je omezený na 120 požadavků za minutu.
/mjml/renderParametry v těle požadavku
sourcestring | objectPovinnéMJML ke kompilaci: značkování MJML (<mjml>…</mjml>), MJML JSON nebo dokument MJML Emailitu, například uložený source šablony. Viz Formáty zdroje. Nejvýše 2 MB.
variablesobjectProměnné Temple pro rendered_html, například first_name, nebo objekt cf s vlastními poli, jaké používají kampaně. Nic se nevyplní automaticky: předejte proměnné, které by poskytl kanál, přes který se odesílá. Viz Proměnné podle kanálu. Musí to být objekt; cokoli jiného vrací 400.
Odpověď
Vrací 200 OK s výsledkem, i když je MJML neplatné:
| Pole | Typ | Popis |
|---|---|---|
valid |
boolean | true, když nejsou žádná chybová hlášení. |
mjml_version |
string | Verze MJML, se kterou Emailit kompiluje. |
html |
string nebo null | Zkompilované HTML, ve kterém zůstávají značky Temple, tak jak ho Emailit ukládá u šablony. null, když MJML obsahuje chyby. |
html_bytes |
integer | Velikost html v UTF-8. Gmail ořezává zprávy větší než zhruba 102 KB. 0, když je html null. |
diagnostics |
array | Všechna hlášení typu chyba, varování a informace. Viz Validace MJML. |
rendered_html |
string nebo null | html s variables dosazenými jazykem Temple. Uvádí se, jen pokud pošlete variables, a když MJML obsahuje chyby, je null. |
Neplatné MJML vrací 200 s valid: false, html: null a diagnostickými hlášeními. rendered_html používá přesně ty variables, které pošlete: chybějící proměnné se vykreslí jako prázdné řetězce nebo jako svá výchozí hodnota, takže {{first_name|"there"}} vykreslí there. Prostý text se z MJML negeneruje.
Pokud source chybí nebo je prázdný, vrací 422 s message: "Validation failed", pokud variables není objekt, vrací 400, a bez přístupu k MJML vrací 403 s error: "mjml_alpha".
{
"valid": true,
"mjml_version": "5.4.1",
"html": "<!doctype html>\n<html lang=\"und\" dir=\"auto\" …>…Hi {{first_name|\"there\"}}, welcome aboard.…<a href=\"{{activation_url}}\" …>…</html>\n",
"html_bytes": 5267,
"diagnostics": [],
"rendered_html": "<!doctype html>\n<html lang=\"und\" dir=\"auto\" …>…Hi Ada, welcome aboard.…<a href=\"https://example.com/activate?token=abc123\" …>…</html>\n"
}{
"valid": false,
"mjml_version": "5.4.1",
"html": null,
"html_bytes": 0,
"diagnostics": [
{
"severity": "error",
"code": "mjml.invalid-child",
"message": "<mj-column> cannot be placed inside <mj-body>. Allowed parents: <mj-group>, <mj-section>.",
"line": 3,
"column": 6,
"tag": "mj-column",
"path": [0, 0]
},
{
"severity": "error",
"code": "mjml.unknown-attribute",
"message": "<mj-text> has no attribute colour. Did you mean color?",
"line": 4,
"column": 16,
"tag": "mj-text",
"attribute": "colour",
"path": [0, 0, 0]
},
{
"severity": "warning",
"code": "mjml.missing-title",
"message": "Add an <mj-title> to <mj-head>; clients and screen readers use it.",
"line": 1,
"column": 2,
"tag": "mjml",
"path": []
},
{
"severity": "info",
"code": "mjml.missing-preview",
"message": "Add an <mj-preview> to control the inbox preview text.",
"line": 1,
"column": 2,
"tag": "mjml",
"path": []
}
],
"rendered_html": null
}{
"message": "Validation failed",
"errors": {
"source": ["The source field is required."]
}
}{
"error": "mjml_alpha",
"message": "MJML is in alpha and available only to Emailit platform admins."
}Načtení reference MJML
Načte všechny komponenty a atributy MJML ve verzi, se kterou Emailit kompiluje, aktuální verze editorů, průvodce jazykem Temple a pravidla pro psaní MJML. Použijte ji při tvorbě nástrojů, nebo když chcete AI modelu dát vše, co potřebuje k psaní platných šablon MJML. Vyžaduje oprávnění full.
Stejná reference je AI agentům dostupná jako nástroj MCP get-mjml-reference. Viz MJML pro AI agenty.
/mjml/referenceOdpověď
Vrací 200 OK s referencí. Příklad výše je zkrácený: components obsahuje všech 36 komponent se všemi jejich atributy.
| Pole | Typ | Popis |
|---|---|---|
mjml_version |
string | Verze MJML, se kterou Emailit kompiluje. |
document_schema_version |
integer | Aktuální schema_version uloženého dokumentu MJML. |
editors |
object | Aktuální verze a fáze vývoje (alpha, beta nebo stable) editorů mjml-code a mjml-visual. |
components |
array | Všechny komponenty MJML. Viz níže. |
temple_guide |
string | Jak Temple funguje uvnitř MJML: proměnné, výchozí hodnoty, podmínky a proměnné kampaní. |
rules |
string | Pravidla pro psaní MJML: struktura, povolené atributy a přístupnost. |
reference_text |
string | Celá reference komponent jako kompaktní prostý text pro prompty. |
Bez přístupu k MJML vrací 403 s error: "mjml_alpha".
Objekt komponenty
| Pole | Typ | Popis |
|---|---|---|
tag |
string | Název tagu, například mj-button. |
label |
string | Zobrazovaný název. |
description |
string | Co komponenta dělá. |
category |
string | root, head, layout, content, interactive, child nebo advanced. |
ending_tag |
boolean | true, když je obsahem surové HTML nebo text (mj-text, mj-button, mj-raw, …). |
parents |
string[] | Prvky, do kterých lze tuto komponentu umístit. |
children |
string[] | Prvky, které tato komponenta může obsahovat. ["*"] znamená jakoukoli komponentu (mj-attributes). |
attributes |
array | Atributy, každý s name, type (typ MJML, například color, unit(px,%){1,4} nebo enum(left,center,right)) a default (null, pokud výchozí hodnota není). |
{
"mjml_version": "5.4.1",
"document_schema_version": 1,
"editors": {
"mjml-code": { "version": "0.2.0", "stage": "alpha" },
"mjml-visual": { "version": "0.2.0", "stage": "alpha" }
},
"components": [
{
"tag": "mj-body",
"label": "Body",
"description": "The visible email. Holds sections, wrappers and heroes.",
"category": "root",
"ending_tag": false,
"parents": ["mjml"],
"children": ["mj-raw", "mj-section", "mj-wrapper", "mj-hero"],
"attributes": [
{ "name": "width", "type": "unit(px)", "default": "600px" },
{ "name": "background-color", "type": "color", "default": null },
{ "name": "id", "type": "string", "default": null },
{ "name": "mj-class", "type": "string", "default": null },
{ "name": "css-class", "type": "string", "default": null }
]
},
{
"tag": "mj-button",
"label": "Button",
"description": "A bulletproof call-to-action button. Content is the label.",
"category": "content",
"ending_tag": true,
"parents": ["mj-column", "mj-hero"],
"children": [],
"attributes": [
{ "name": "align", "type": "enum(left,center,right)", "default": "center" },
{ "name": "background-color", "type": "color", "default": "#414141" },
{ "name": "href", "type": "string", "default": null },
{ "name": "inner-padding", "type": "unit(px,%){1,4}", "default": "10px 25px" }
]
}
],
"temple_guide": "Temple is Emailit's templating language, evaluated per recipient at send time on the final HTML:\n- {{first_name}} inserts a variable; …",
"rules": "MJML rules:\n- Structure: <mjml> > <mj-head> (optional) + <mj-body>. …",
"reference_text": "MJML 5.4.1 component reference. Format: name=type[default]. …"
}{
"error": "mjml_alpha",
"message": "MJML is in alpha and available only to Emailit platform admins."
}