PrůvodceAlfa
Editory a API pro MJML
Vytvářejte responzivní šablony a kampaně v MJML, alfaverzi otevřené jen týmu Emailitu. Vizuální editor a editor kódu, uložené dokumenty, validace, Temple v MJML, živá spolupráce a API pro MJML.
MJML je značkovací jazyk pro responzivní e-maily. Píšete sekce, sloupce a komponenty, například <mj-text> a <mj-button>, a MJML je zkompiluje do HTML, které se v různých e-mailových klientech vykreslí stejně. V Emailitu může být MJML zdrojem šablony nebo kampaně: napíšete ho v editorech ve webovém rozhraní, nebo ho pošlete přes API, a Emailit ho zvaliduje a zkompiluje z něj HTML.
Přehled
- Šablony:
editor: "mjml"a MJML vsource. Viz Vytvoření šablony. - Kampaně:
content_type: "mjml"a MJML vcontent. Viz Kampaně. - Automatizace: krok Send email odešle šablonu MJML stejně jako kteroukoli jinou šablonu. Viz Automatizace.
- Endpointy MJML: Validace MJML, Vykreslení MJML a Načtení reference MJML.
Kdo může MJML používat
Během alfaverze je MJML dostupné jen administrátorům platformy Emailit. Role Admin ve workspace nestačí.
| Kde | Tým Emailitu | Všichni ostatní |
|---|---|---|
| Webové rozhraní | Editory MJML, import MJML, Edit with AI a živá spolupráce | Žádné editory MJML. Šablona nebo kampaň MJML zobrazí poznámku, nejde otevřít v editoru a i tak se odešle. |
| API | Šablony MJML, kampaně MJML a endpointy MJML | 403 s error: "mjml_alpha". U kampaně zůstává content_type: "mjml" pouhým označením, stejně jako před alfaverzí. Viz Kampaně. |
| API klíče | Žádné. API klíče patří workspace, ne konkrétnímu člověku. | 403 s error: "mjml_alpha" |
| MCP server | Nástroje MJML a parametry MJML v nástrojích pro šablony a kampaně | Nezobrazují se |
Přejmenovat, publikovat, vyexportovat, odeslat a smazat šablony a kampaně MJML může i nadále kdokoli. Duplikací šablony MJML vznikne nová šablona MJML, takže k ní potřebujete přístup k MJML.
Verze MJML
Emailit kompiluje veškeré MJML pomocí MJML 5.4.1, na serveru i v živém náhledu v editorech. Validace kontroluje tagy, atributy a hodnoty atributů podle této verze. Endpoint Načtení reference MJML vrací tuto verzi a všechny komponenty a atributy, které podporuje.
Editory
Webové rozhraní má dva editory MJML. Oba mají vlastní verze a oba jsou alfaverze 0.x.
| Editor | ID | Verze | Popis |
|---|---|---|---|
| MJML Visual Editor | mjml-visual |
0.2.0 (alfaverze) | Drag & drop přímo na vykresleném e-mailu, pokrývá všechny komponenty a atributy MJML |
| MJML Code Editor | mjml-code |
0.2.0 (alfaverze) | MJML s automatickým doplňováním, průběžnou validací a živým náhledem pro počítač i mobil |
Oba editory ukládají šablonu s editor: "mjml". Uložený dokument zaznamenává, který editor a v jaké verzi ho naposledy uložil. Kolegové mohou stejnou šablonu nebo kampaň upravovat současně. Viz Společné úpravy.
Formáty zdroje
Všude, kde Emailit přijímá MJML (pole source u šablony, content u kampaně a pole source u endpointů MJML), můžete poslat kterýkoli z těchto formátů:
| Formát | Příklad |
|---|---|
| Značkování MJML | Řetězec, který začíná <mjml>. Před ním smí být deklarace XML nebo komentáře. |
| MJML JSON | Vlastní formát JSON jazyka MJML, jako objekt nebo řetězec JSON: { "tagName": "mjml", "attributes": {}, "children": [ … ] }. Komponenty typu ending tag, například mj-text, mají své HTML v content. |
| Dokument MJML Emailitu | Obálka, kterou Emailit ukládá (viz níže), jako objekt nebo řetězec JSON |
Cokoli jiného Emailit odmítne s kódem document.unrecognized. Zdroje větší než 2 MB odmítne s kódem document.too-large.
Uložený dokument
Emailit ukládá MJML do obálky s verzí. Je to source šablony a content kampaně:
{
"kind": "emailit/mjml",
"schema_version": 1,
"mjml_version": "5.4.1",
"editor": "api",
"editor_version": null,
"format": "markup",
"content": "<mjml>\n <mj-body>\n …\n </mj-body>\n</mjml>"
}| Pole | Popis |
|---|---|
kind |
Vždy emailit/mjml. |
schema_version |
Verze tvaru obálky. Aktuálně 1. |
mjml_version |
Vydání MJML, pro které je obsah určený. Emailit sem zapíše verzi, se kterou kompiloval. |
editor |
Co dokument naposledy zapsalo: mjml-visual, mjml-code, ai (Edit with AI) nebo api (API, nástroje MCP a import souborů). |
editor_version |
Verze tohoto editoru, nebo null. |
format |
markup: content je značkování MJML uložené tak, jak je napsané, včetně komentářů a formátování. json: content je MJML JSON. |
content |
Samotné MJML. |
Formát určuje to, co pošlete: značkování se uloží jako markup a MJML JSON jako json. Obojí se zaznamená jako editor: "api". Obálka, kterou pošlete, si ponechá svůj editor a editor_version.
Odpovědi API vracejí source jako tuto obálku převedenou na řetězec JSON a můžete ji poslat zpět beze změny. Odpovědi také obsahují objekt mjml s verzemi obálky:
"mjml": {
"mjml_version": "5.4.1",
"schema_version": 1,
"editor": "api",
"editor_version": null,
"format": "markup"
}Webové rozhraní otevře dokument v editoru, který ho naposledy uložil. Dokumenty zapsané přes API se otevřou v editoru kódu, když má format hodnotu markup, a ve vizuálním editoru, když má hodnotu json.
Kompilace a uložení
U šablon a kampaní MJML spravuje HTML Emailit:
- Při vytvoření a úpravě Emailit MJML zvaliduje a zkompiluje. Zkompilované HTML se uloží jako
htmlšablony a jakékolihtml, které pošlete, se ignoruje. - Při odesílání se použije uložené HTML. Značky Temple v něm zůstávají a vykreslí se pro každého příjemce při odeslání.
- Když upravíte jen jiná pole, například
namenebosubject, MJML se znovu nekompiluje. textse z MJML negeneruje. Pokud chcete část v prostém textu, pošletetextsami.- Když existující šablonu přepnete na
editor: "mjml"a nepošletesource, zkompiluje se uloženýsourcešablony, který pak musí být MJML.
HTML se kompiluje při uložení, takže HTML existující šablony se změní, až když ji znovu uložíte.
curl https://api.emailit.com/v2/templates \
-H "Authorization: Bearer your_api_key" \
-H "Content-Type: application/json" \
-d '{
"name": "Welcome",
"alias": "welcome",
"subject": "Welcome, {{first_name|\"there\"}}",
"editor": "mjml",
"source": "<mjml><mj-head><mj-title>Welcome</mj-title><mj-preview>Your account is ready</mj-preview></mj-head><mj-body><mj-section><mj-column><mj-text>Hi {{first_name|\"there\"}}, welcome aboard.</mj-text><mj-button href=\"{{activation_url}}\">Activate account</mj-button></mj-column></mj-section></mj-body></mjml>"
}'Pak ji odešlete jako kteroukoli jinou šablonu endpointem Odeslání e-mailu: s "template": "welcome" a objektem variables.
Validace
Každé uložení provede stejné kontroly jako Validace MJML:
- Syntaxe XML: neuzavřené nebo nepárové tagy a poškozené atributy (
xml.*) - Struktura MJML, atributy a hodnoty atributů pro MJML 5.4.1 (
mjml.*) - Syntaxe Temple a spárované bloky
{{#if}}(temple.*) - Formát zdroje a verze (
document.*) a samotný kompilátor (compiler.*)
Každé zjištění je diagnostické hlášení se závažností:
| Závažnost | Co se stane |
|---|---|
error |
MJML se odmítne. Šablony a kampaně se neuloží. |
warning |
Uloží se. Pravděpodobně jde o chybu: chybí <mj-title>, text je mimo komponentu, podmíněný blok přesahuje přes více komponent nebo HTML překračuje limit 102 KB, nad kterým ho Gmail ořízne. |
info |
Uloží se. Návrh nebo poznámka: chybí <mj-preview>, obrázek nemá alt nebo je dokument napsaný pro starší verzi MJML. |
Hlášení má tato pole. Pole, která se ho netýkají, se vynechávají.
| Pole | Popis |
|---|---|
severity |
error, warning nebo info |
code |
Stálý strojově čitelný kód, například mjml.invalid-child |
message |
Čitelné vysvětlení, často s opravou („Did you mean color?“) |
line, column |
Pozice ve značkování, číslovaná od 1. Jen u zdrojů ve značkování. |
tag |
Prvek, kterého se hlášení týká |
attribute |
Atribut, pokud nějaký je |
path |
Cesta indexů potomků od kořene <mjml>. [0, 1] je druhý potomek prvního potomka. |
Chybová odpověď
Uložení šablony nebo kampaně s chybovými hlášeními vrací 422. Pro tento zdroj:
<mjml>
<mj-body>
<mj-section>
<mj-column>
<mj-text colour="#333333">Hi {{first_name|"there"}}</mj-text>
<mj-button href="{{cta_url}}">{{#if trial}}Start trial</mj-button>
</mj-column>
</mj-section>
</mj-body>
</mjml>vypadá odpověď takto:
{
"message": "The MJML is not valid.",
"errors": {
"source": [
"Line 5: <mj-text> has no attribute colour. Did you mean color?",
"Line 6: {{#if trial}} is never closed with {{/if}}."
]
},
"diagnostics": [
{
"severity": "error",
"code": "mjml.unknown-attribute",
"message": "<mj-text> has no attribute colour. Did you mean color?",
"line": 5,
"column": 18,
"tag": "mj-text",
"attribute": "colour",
"path": [0, 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": []
},
{
"severity": "error",
"code": "temple.unclosed-if",
"message": "{{#if trial}} is never closed with {{/if}}.",
"line": 6,
"column": 39,
"tag": "mj-button",
"path": [0, 0, 0, 1]
}
]
}errors.source(u kampaníerrors.content) uvádí nejvýše pět chybových zpráv, a pokud je řádek známý, i s ním.diagnosticsuvádí všechna hlášení včetně varování a informací.- Chybějící nebo prázdný zdroj vrací
422s"message": "Validation failed","errors": { "source": ["The source field is required for MJML."] }a prázdným polemdiagnostics.
Validace MJML provede stejné kontroly bez uložení a místo 422 vrací 200 s valid: false.
Kódy hlášení
XML (zdroje ve značkování)
| Kód | Závažnost | Význam |
|---|---|---|
xml.unclosed-tag |
error | Prvek se nikde neuzavírá. |
xml.unexpected-closing-tag |
error | Uzavírací tag neodpovídá žádnému otevřenému prvku. |
xml.malformed-closing-tag |
error | Uzavírací tag nejde přečíst. |
xml.unterminated-tag |
error | Otevírací tag nemá uzavírací >. |
xml.unterminated-attribute |
error | Hodnota atributu nemá uzavírací uvozovku. |
xml.missing-attribute-value |
error | name= nemá hodnotu. |
xml.invalid-attribute |
error | Neočekávaný znak uvnitř tagu. |
xml.duplicate-attribute |
error | Stejný atribut dvakrát u jednoho prvku. Použije se první. |
xml.unterminated-comment |
error | Komentář nemá -->. |
xml.unterminated-cdata |
error | Sekce CDATA nemá ]]>. |
xml.unexpected-character |
error | Samostatné < mimo komponentu typu ending tag. |
xml.multiple-roots |
error | Víc než jeden kořenový prvek. |
xml.text-outside-root |
error | Text mimo <mjml>. |
mjml.missing-root |
error | Dokument je prázdný. |
xml.unquoted-attribute |
warning | Hodnota atributu bez uvozovek. |
xml.stray-text |
warning | Text mezi prvky mimo jakoukoli obsahovou komponentu. MJML ho ignoruje. |
xml.unexpected-declaration |
warning | Deklarace až po začátku <mjml>. |
MJML
| Kód | Závažnost | Význam |
|---|---|---|
mjml.unknown-tag |
error | Prvek, který v MJML 5.4.1 neexistuje. Pokud je některý podobný, hlášení navrhne opravu („did you mean“). |
mjml.unknown-attribute |
error | Prvek takový atribut nemá. U samotného <mjml> jde o varování. |
mjml.invalid-attribute-value |
error | Nesprávný druh hodnoty: není to barva, jednotka ani povolená hodnota. |
mjml.invalid-child |
error | Prvek nesmí být uvnitř svého rodiče. |
mjml.invalid-root |
error | Kořenový prvek není <mjml>. |
mjml.missing-body |
error | Chybí <mj-body>. |
mjml.duplicate-body |
error | Víc než jeden <mj-body>. |
mjml.include-not-supported |
error | <mj-include> se nepodporuje. |
mjml.missing-attribute |
error nebo warning | Chybí povinný atribut. Chyba u name a href v <mj-font>, name v <mj-class>, path v <mj-selector> a name v <mj-html-attribute>. Varování u src obrázku a width v <mj-breakpoint>. |
mjml.missing-title |
warning | V <mj-head> chybí <mj-title>. |
mjml.empty-title |
warning | <mj-title> je prázdný. |
mjml.duplicate-head |
warning | Víc než jeden <mj-head>. |
mjml.ignored-content |
warning | Text uvnitř prvku, který obsah nepřijímá. |
mjml.ignored-children |
warning | Podřízené prvky uvnitř prvku, který přijímá jen obsah. |
mjml.column-widths |
warning | Šířky sloupců v sekci nebo skupině dávají dohromady víc než 100 %. |
mjml.unknown-social-network |
warning | Název <mj-social-element> bez vestavěné ikony a bez src. |
mjml.script |
warning | <script> v obsahu. E-mailoví klienti ho odstraní. |
mjml.missing-preview |
info | Chybí <mj-preview>. |
mjml.missing-alt |
info | <mj-image> bez alt. |
mjml.button-without-link |
info | <mj-button> bez href. |
Temple
| Kód | Závažnost | Význam |
|---|---|---|
temple.unclosed-if |
error | {{#if}} bez {{/if}}. |
temple.endif-without-if |
error | {{/if}} bez {{#if}}. |
temple.else-without-if |
error | {{else}} mimo blok. |
temple.duplicate-else |
error | Dvě {{else}} v jednom bloku. |
temple.unclosed-expression |
error | {{ bez }}. |
temple.empty-expression |
error | {{ }}. |
temple.empty-condition |
error | {{#if}} bez proměnné. |
temple.malformed-else |
error | {{else}} zapsané s mezerami nebo argumenty. |
temple.unsupported-block |
error | Jiný blok než {{#if}}, například {{#each}}. |
temple.unsupported-syntax |
error | Trojité závorky {{{…}}}, dílčí šablony {{> …}} nebo komentáře {{! …}}. |
temple.invalid-variable |
warning | Proměnná, která není platnou cestou. |
temple.invalid-condition |
warning | Podmínka, která není cestou k proměnné. Porovnání se nepodporují. |
temple.block-crosses-components |
warning | Blok, který se otevírá v jedné komponentě a zavírá v jiné. |
Dokument a kompilátor
| Kód | Závažnost | Význam |
|---|---|---|
document.empty |
error | Zdroj je prázdný. |
document.unrecognized |
error | Není to značkování MJML, MJML JSON ani dokument MJML Emailitu. |
document.invalid-json |
error | Zdroj vypadá jako JSON, ale nejde zpracovat. |
document.invalid-node |
error | MJML JSON s poškozeným uzlem. |
document.too-large |
error | Zdroj je větší než 2 MB. |
document.unsupported-schema |
error | schema_version obálky je novější, než Emailit umí číst. |
document.unsupported-mjml-version |
error | Verzi MJML dokumentu nejde zkompilovat. Viz Verze a aktualizace. |
document.assumed-mjml-version |
info | Obálka nemá mjml_version, takže se předpokládá aktuální verze. |
document.mjml-upgraded |
info | Dokument je napsaný pro jinou verzi MJML a zkompiloval se s 5.4.1. |
compiler.failed |
error | MJML nedokázalo dokument vykreslit. |
compiler.gmail-clipping |
warning | HTML je větší než 102 KB, takže ho Gmail ořízne. |
Temple v MJML
Značky Temple projdou kompilací MJML beze změny. Emailit je vykreslí pro každého příjemce při odeslání, a to ve zkompilovaném HTML.
Proměnné v obsahu a atributech
Proměnné fungují v obsahu i v jakémkoli atributu:
<mj-text>Hi {{first_name|"there"}},</mj-text>
<mj-button href="{{activation_url}}">Activate your account</mj-button>
<mj-image src="{{logo_url}}" alt="{{company|'Acme'}}" />
<mj-section background-color="{{brand_color|'#ffffff'}}">- Uvnitř atributu pište výchozí hodnoty v jednoduchých uvozovkách:
href="{{url|'https://example.com'}}". - U hodnot atributů, které obsahují Temple, se typ nekontroluje, protože hodnota je známá až při odeslání. Zajistěte, aby proměnná obsahovala hodnotu platnou pro daný atribut, například barvu pro
background-color. - Hodnoty se vkládají tak, jak jsou, bez escapování HTML.
Podmíněné bloky
V rámci jedné komponenty dejte blok do jejího obsahu:
<mj-text>{{#if plan}}You are on the {{plan}} plan.{{else}}You are on the free plan.{{/if}}</mj-text>Pokud chcete zobrazit nebo skrýt celé komponenty, dejte značky bloku do sourozeneckých prvků <mj-raw>:
<mj-raw>{{#if vip}}</mj-raw>
<mj-section background-color="#fef3c7">
<mj-column>
<mj-text>Your VIP perks are ready.</mj-text>
</mj-column>
</mj-section>
<mj-raw>{{/if}}</mj-raw>Samostatné značky bloků mezi komponentami se při zpracování značkování převedou na <mj-raw>, takže tohle je totéž:
{{#if vip}}
<mj-section background-color="#fef3c7">
…
</mj-section>
{{/if}}Ostatní text mezi komponentami MJML ignoruje a validace ho hlásí jako xml.stray-text.
- Bloky musí být spárované v celém dokumentu. Neuzavřená nebo přebytečná značka je chyba.
- Každý blok otevřete i uzavřete v obsahu jedné komponenty, nebo mezi sourozeneckými prvky
<mj-raw>jednoho rodiče. Blok, který se otevírá v jedné komponentě a zavírá v jiné, dostane varovánítemple.block-crosses-components, protože jeho skrytí by rozdělilo strukturu HTML. - Bloky lze vnořovat.
Co se nepodporuje
<mj-include>se odmítne s kódemmjml.include-not-supported. Vložené MJML zkopírujte přímo do dokumentu.- Tagy a atributy, které MJML 5.4.1 nedefinuje, jsou chyby.
- Temple nemá cykly, pomocné funkce, dílčí šablony, komentáře, trojité závorky ani porovnání. Viz Temple.
Proměnné podle kanálu
Stejnou šablonu MJML lze odeslat z několika míst a každé z nich poskytuje jiné proměnné:
| Odesláno z | Proměnné |
|---|---|
Endpoint API Odeslání e-mailu s template |
Objekt variables, který předáte |
| Krok automatizace Send email | Automatizace kontaktů: pole kontaktu na nejvyšší úrovni ({{first_name}}, {{email}}), vlastní pole jako {{cf.<key>}} nebo {{custom_fields.<key>}} a navíc {{contact.*}}, {{payload.*}} a {{meta.*}} |
| Kampaně MJML | {{first_name}}, {{last_name}}, {{email}}, {{unsubscribe_url}}, {{cf.<key>}} a stejná pole pod {{contact.*}} |
Editory vkládají vlastní pole jako {{cf.<key>}}, což funguje v kampaních MJML i v automatizacích. Při odesílání přes API předejte proměnné sami.
Verzi pro konkrétního příjemce si zobrazíte, když zavoláte Vykreslení MJML s variables.
Kampaně
Kampaň s content_type: "mjml" ukládá své MJML do content v kterémkoli z formátů zdroje a Emailit z něj zkompiluje její html. Stejně jako u šablon se jakékoli html, které pošlete, ignoruje. Neplatné MJML vrací 422 s errors.content a diagnostics. Když pošlete prázdný content, smaže se obsah i HTML. Odpovědi pro kampaně obsahují stejný objekt mjml jako šablony.
Kampaně MJML vykreslují předmět, HTML a text jazykem Temple pro každého příjemce, a to i u testovacích e-mailů. K dispozici jsou tyto proměnné:
| Proměnná | Hodnota |
|---|---|
{{first_name}} |
Křestní jméno kontaktu |
{{last_name}} |
Příjmení kontaktu |
{{email}} |
E-mailová adresa kontaktu |
{{unsubscribe_url}} |
Odkaz pro odhlášení pro tento kontakt a kampaň |
{{cf.<key>}} |
Vlastní pole kontaktu, například {{cf.company}} |
{{contact.first_name}}, {{contact.cf.<key>}}, … |
Stejná pole pod contact |
Prázdná pole kontaktu se počítají jako chybějící, takže se použijí výchozí hodnoty: {{first_name|"there"}} vykreslí u kontaktu bez křestního jména there. V patičce marketingových e-mailů ponechte odkaz {{unsubscribe_url}}.
Klasické kampaně (HTML, text a ostatní editory) dál používají pevné slučovací značky:
| Klasické kampaně | Kampaně MJML | |
|---|---|---|
| Mechanismus | Pevné slučovací značky | Temple |
{{#if}} … {{else}} … {{/if}} |
Nezpracovává se | Podporováno |
Výchozí hodnoty, například {{first_name|"there"}} |
Nezpracovávají se | Podporovány. Prázdná pole se počítají jako chybějící. |
| Velikost písmen | {{FIRST_NAME}} funguje |
Cesty rozlišují velká a malá písmena |
| Neznámé značky | Zůstanou ve zprávě tak, jak jsou napsané | Vykreslí se jako prázdné |
Když ve webovém rozhraní založíte kampaň ze šablony MJML, zkopíruje se dokument MJML šablony do kampaně.
Bez přístupu k MJML
Během alfaverze Emailit kompiluje MJML kampaní jen pro tým Emailitu. Pro všechny ostatní, včetně API klíčů, zůstává content_type: "mjml" pouhým označením jako před alfaverzí: content se uloží tak, jak ho pošlete, zkompilované HTML posíláte v html a při odesílání se použijí klasické slučovací značky. Když kampaň založíte ze šablony MJML, zkopíruje se HTML šablony do kampaně typu HTML.
Automatizace
Krok Send email odkazuje na šablonu podle ID (tem_…). Šablony MJML fungují jako kterékoli jiné: krok odešle zkompilované HTML šablony a vykreslí Temple s proměnnými automatizace. Viz E-maily z automatizací.
V nastavení kroku tlačítko Design a new email vytvoří šablonu MJML z úvodního designu, vybere ji pro krok a otevře ji ve vizuálním editoru. Tlačítko Edit email otevře vybranou šablonu MJML. Úpravy mění samotnou šablonu, takže se projeví v každém kroku a volání API, které tuto šablonu používá. Bez přístupu k MJML krok místo toho zobrazí odkaz na šablonu.
Společné úpravy
Každý, kdo otevře stejnou uloženou šablonu nebo kampaň MJML, upravuje v reálném čase jeden sdílený koncept, a to v kterémkoli z obou editorů:
- Přítomnost: záhlaví ukazuje, kdo další upravuje a co právě dělá. Ve vizuálním editoru vidíte jejich výběry, kurzory a krátké zvýraznění v jejich barvě tam, kde něco mění. Panel Layers ukazuje, kdo má kterou komponentu vybranou. Výběrem avataru přeskočíte na výběr daného člověka.
- Úpravy se slučují: změny různých komponent, atributů nebo částí textu se spojí, místo aby se navzájem přepsaly. Zatímco někdo píše do textu na plátně, je tento text pro ostatní zamčený.
- Editor kódu: vaše změny se do sdíleného konceptu slučují průběžně, jak píšete. Změny ostatních se ve vašem kódu objeví, až přestanete psát, aby vám neposkakoval kurzor. Pokud má váš kód syntaktickou chybu, počkají, dokud ji neopravíte.
- Zpět a znovu vracejí jen vaše vlastní změny.
- Ukládání: pro všechny je jedno tlačítko Save. Záhlaví ukazuje neuložené změny celého konceptu a kdo naposledy ukládal. Odesílá se vždy uložená verze.
- Koncept zůstává: zavřením editoru ani výpadkem připojení o změny nepřijdete. Zůstanou ve sdíleném konceptu a synchronizují se, až budete znovu online. Po opětovném otevření editoru se neuložené změny obnoví a můžete je zahodit a vrátit se k uložené verzi.
- Uloženo jinde: když se šablona nebo kampaň uloží mimo editor (přes API, MCP nebo Edit with AI), zatímco je otevřená, koncept bez neuložených změn se přepne na uloženou verzi. Koncept s neuloženými změnami si je ponechá a nabídne Load saved version, nebo Keep this draft.
- Smazáno: pokud se šablona nebo kampaň během úprav smaže nebo přestane být MJML, editor vás na to upozorní a nechá vás MJML zkopírovat.
Společné úpravy vyžadují uložené a platné MJML. Šablona nebo kampaň, jejíž MJML nejde zpracovat, nebo která ještě není uložená jako MJML, se otevře bez nich: každý upravuje sám a platí poslední uložení. Editor na to upozorní v banneru. V zablokovaném workspace jsou editory jen pro čtení.
Verze a aktualizace
Emailit kompiluje vždy jednou verzí MJML, aktuálně 5.4.1. Každý uložený dokument zaznamenává mjml_version, pro kterou je určený, a Emailit ji kontroluje při každé kompilaci dokumentu:
mjml_version dokumentu |
Výsledek |
|---|---|
| 5.4.1 | Zkompiluje se tak, jak je |
| Chybí | Předpokládá se 5.4.1 (document.assumed-mjml-version, info) |
| Jiné vydání 5.x | Zkompiluje se s 5.4.1 (document.mjml-upgraded, info) |
| 4.x | Převede se na MJML 5 a pak se zkompiluje s 5.4.1 (document.mjml-upgraded, info). MJML 4 a 5 mají stejné komponenty a atributy; výstupní HTML se mírně liší. |
| 3.x nebo starší | Odmítne se s document.unsupported-mjml-version |
| Novější hlavní verze | Odmítne se s document.unsupported-mjml-version |
Dokument, jehož schema_version je novější, než Emailit umí číst, se odmítne s document.unsupported-schema. Při uložení se dokument uloží s aktuální mjml_version a schema_version. Po aktualizaci zkontrolujte náhled.
Editory zobrazují svou verzi a přehled změn. Když byl dokument uložen novější verzí editoru, než jakou má stránka, kterou máte otevřenou, editor vás požádá o její obnovení.
MJML pro AI agenty
Načtení reference MJML dává nástrojům a AI modelům vše, co potřebují k psaní platného MJML pro Emailit: každou komponentu s povolenými rodiči, potomky a atributy (typ a výchozí hodnota), průvodce jazykem Temple, pravidla pro psaní MJML a kompaktní reference_text v prostém textu pro prompty.
Na MCP serveru dostávají relace týmu Emailitu v sadě nástrojů templates navíc tyto nástroje:
| Nástroj | Popis |
|---|---|
get-mjml-reference |
Reference jako text: verze MJML a editorů, pravidla pro psaní, průvodce jazykem Temple a reference komponent. |
validate-mjml |
Validace MJML: valid a diagnostická hlášení. |
render-mjml |
Vykreslení MJML: zkompilované HTML a s variables také rendered_html. |
create-template, update-template |
Přijímají také editor: "mjml" a source, tedy značkování MJML nebo MJML JSON jako řetězec. HTML zkompiluje Emailit. |
create-campaign, update-campaign |
Přijímají také content_type: "mjml" s MJML v content. |
Když uložení neprojde validací, chyba nástroje uvede chybová hlášení a varování s čísly řádků, aby agent mohl zdroj opravit. Typický postup: přečíst referenci, napsat MJML, volat validate-mjml, dokud valid není true, uložit pomocí create-template a pak zkontrolovat verzi pro příjemce pomocí render-mjml. Ostatní relace tyto nástroje ani parametry nevidí.
Ve webovém rozhraní
- Šablony: vytvořte šablonu a zvolte MJML Visual Editor (Alpha), nebo MJML Code Editor (Alpha).
- Vizuální editor: drag & drop přímo na vykresleném e-mailu, strom vrstev, panel vlastností pro každý atribut MJML, nastavení dokumentu (hlavička, písma, styly a výchozí atributy), proměnné Temple v jakékoli vlastnosti a podmíněné bloky kolem komponent.
- Editor kódu: automatické doplňování tagů, atributů a hodnot MJML i jazyka Temple, průběžná validace s rychlými opravami a formátování.
- Oba editory: živý náhled pro počítač i mobil kompilovaný v prohlížeči pomocí MJML 5.4.1, náhled s ukázkovými daty (s vykresleným Temple), seznam problémů a AI asistent, pokud je zapnutý. U stejného dokumentu můžete přepínat mezi vizuálním editorem a editorem kódu; přepnutí do vizuálního editoru vyžaduje kód bez syntaktických chyb. Dokud MJML obsahuje chyby, nejde ho uložit.
- Společné úpravy: kolegové, kteří otevřou stejnou šablonu nebo kampaň, ji upravují v reálném čase. Viz Společné úpravy.
- Edit with AI: popište změnu šablony nebo kampaně MJML, aniž byste otevírali editor.
- Import: soubor
.mjml, soubor.jsons MJML JSON nebo dokumentem MJML Emailitu, nebo ZIP stemplate.mjmla složkouimages/v kořeni. - Export: MJML (značkování), MJML JSON (uložený dokument), HTML, nebo ZIP s
template.mjml,template.htmlaimages/. Export funguje pro všechny. - Kampaně: pro obsah kampaně zvolte MJML Visual Editor, nebo MJML Code Editor.
- Automatizace: e-mail kroku Send email navrhnete přímo na místě. Viz Automatizace.