Aller au contenu
Docs

GuideAlpha

Créez des modèles et des campagnes responsives avec MJML, en alpha et réservé à l’équipe Emailit. Les éditeurs visuel et de code, les documents enregistrés, la validation, Temple dans MJML, la collaboration en direct et l’API MJML.

Mis à jour le 7 oct. 2026

MJML est un langage de balisage pour les e-mails responsives. Vous écrivez des sections, des colonnes et des composants comme <mj-text> et <mj-button>, et MJML les compile en un HTML qui s’affiche de façon homogène dans les clients de messagerie. Dans Emailit, MJML peut être la source d’un modèle ou d’une campagne : vous l’écrivez dans les éditeurs du tableau de bord ou l’envoyez via l’API, et Emailit le valide et compile le HTML.

Vue d’ensemble

Qui peut utiliser MJML

Pendant l’alpha, MJML est disponible uniquement pour les administrateurs de la plateforme Emailit. Le rôle Admin d’un espace de travail ne suffit pas.

Où Équipe Emailit Tous les autres
Tableau de bord Éditeurs MJML, import MJML, Edit with AI et collaboration en direct Pas d’éditeur MJML. Un modèle ou une campagne MJML affiche une remarque, ne peut pas être ouvert dans un éditeur et continue d’être envoyé.
API Modèles MJML, campagnes MJML et endpoints MJML 403 avec error: "mjml_alpha". Le content_type: "mjml" d’une campagne reste un simple libellé, comme avant l’alpha. Voir Campagnes.
Clés API Aucune. Les clés API appartiennent à un espace de travail, pas à une personne. 403 avec error: "mjml_alpha"
Serveur MCP Les outils MJML et les paramètres MJML des outils de modèles et de campagnes Non listés

Tout le monde peut toujours renommer, publier, exporter, envoyer et supprimer les modèles et les campagnes MJML. Dupliquer un modèle MJML crée un nouveau modèle MJML : cette action nécessite donc l’accès à MJML.

Version de MJML

Emailit compile tout le MJML avec MJML 5.4.1, sur le serveur comme dans l’aperçu en direct des éditeurs. La validation vérifie les balises, les attributs et les valeurs d’attribut par rapport à cette version. Récupérer la référence MJML renvoie la version ainsi que chaque composant et chaque attribut qu’elle prend en charge.

Éditeurs

Le tableau de bord propose deux éditeurs MJML. Tous deux sont versionnés, et tous deux sont des versions alpha 0.x.

Éditeur ID Version Description
MJML Visual Editor mjml-visual 0.2.0 (alpha) Glisser-déposer directement sur le rendu de l’e-mail, pour chaque composant et chaque attribut MJML
MJML Code Editor mjml-code 0.2.0 (alpha) Du MJML avec autocomplétion, validation dans le code et aperçu en direct sur ordinateur et mobile

Les deux éditeurs enregistrent un modèle avec editor: "mjml". Le document enregistré indique quel éditeur, et quelle version de cet éditeur, l’a enregistré en dernier. Vos collègues peuvent modifier le même modèle ou la même campagne en même temps. Consultez Édition collaborative.

Formats de source

Partout où Emailit accepte du MJML (le source d’un modèle, le content d’une campagne et le champ source des endpoints MJML), vous pouvez envoyer l’un de ces formats :

Format Exemple
Balisage MJML Une chaîne qui commence par <mjml>. Une déclaration XML ou des commentaires en tête sont autorisés.
MJML JSON Le format JSON propre à MJML, sous forme d’objet ou de chaîne JSON : { "tagName": "mjml", "attributes": {}, "children": [ … ] }. Les balises terminales (ending tags) comme mj-text portent leur HTML dans content.
Document MJML Emailit L’enveloppe qu’Emailit enregistre (ci-dessous), sous forme d’objet ou de chaîne JSON

Tout autre contenu est rejeté avec document.unrecognized. Les sources de plus de 2 Mo sont rejetées avec document.too-large.

Le document enregistré

Emailit enregistre le MJML dans une enveloppe versionnée. C’est le source du modèle et le content de la campagne :

JSON
{
  "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>"
}
Champ Description
kind Toujours emailit/mjml.
schema_version Version de la structure de l’enveloppe. Actuellement 1.
mjml_version La version de MJML que vise le contenu. Emailit y indique la version avec laquelle il a compilé.
editor Ce qui a écrit le document en dernier : mjml-visual, mjml-code, ai (Edit with AI) ou api (l’API, les outils MCP et les imports de fichiers).
editor_version Version de cet éditeur, ou null.
format markup : content est du balisage MJML, conservé tel qu’écrit, commentaires et mise en forme compris. json : content est du MJML JSON.
content Le MJML.

Ce que vous envoyez détermine le format : le balisage est enregistré en markup et le MJML JSON en json. Les deux sont enregistrés avec editor: "api". Une enveloppe que vous envoyez conserve son editor et son editor_version.

Les réponses de l’API renvoient source sous la forme de cette enveloppe, sérialisée en chaîne JSON, et vous pouvez la renvoyer telle quelle. Les réponses incluent aussi un objet mjml avec les versions de l’enveloppe :

JSON
"mjml": {
  "mjml_version": "5.4.1",
  "schema_version": 1,
  "editor": "api",
  "editor_version": null,
  "format": "markup"
}

Le tableau de bord ouvre un document dans l’éditeur qui l’a enregistré en dernier. Les documents écrits via l’API s’ouvrent dans l’éditeur de code quand format vaut markup, et dans l’éditeur visuel quand il vaut json.

Compiler et enregistrer

Pour les modèles et les campagnes MJML, c’est Emailit qui produit le HTML :

  • À la création et à la mise à jour, Emailit valide le MJML et le compile. Le HTML compilé est enregistré comme html du modèle, et tout html que vous envoyez est ignoré.
  • L’envoi utilise le HTML enregistré. Les balises Temple y restent, et leur rendu est effectué pour chaque destinataire au moment de l’envoi.
  • Mettre à jour uniquement d’autres champs, comme name ou subject, ne déclenche pas de recompilation.
  • text n’est pas généré à partir du MJML. Envoyez text vous-même si vous voulez une partie en texte brut.
  • Faire passer un modèle existant à editor: "mjml" sans envoyer source compile le source enregistré du modèle, qui doit alors être du MJML.

Le HTML est compilé à l’enregistrement : le HTML d’un modèle existant ne change donc que lorsque le modèle est de nouveau enregistré.

Terminal
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>"
  }'

Envoyez-le ensuite comme n’importe quel autre modèle avec Envoyer un e-mail : "template": "welcome" et un objet variables.

Validation

Chaque enregistrement exécute les mêmes contrôles que Valider du MJML :

  • Syntaxe XML : balises non fermées ou mal appariées et attributs mal formés (xml.*)
  • Structure MJML, attributs et valeurs d’attribut pour MJML 5.4.1 (mjml.*)
  • Syntaxe Temple et équilibre des blocs {{#if}} (temple.*)
  • Le format de la source et les versions (document.*), ainsi que le compilateur lui-même (compiler.*)

Chaque problème détecté est un diagnostic doté d’un niveau de gravité :

Gravité Effet
error Le MJML est rejeté. Les modèles et les campagnes ne sont pas enregistrés.
warning Enregistré. Probablement une erreur : pas de <mj-title>, du texte hors d’un composant, un bloc conditionnel à cheval sur plusieurs composants, ou un HTML qui dépasse la limite de troncature de Gmail (102 Ko).
info Enregistré. Une suggestion ou une remarque : pas de <mj-preview>, une image sans alt, ou un document écrit pour une version plus ancienne de MJML.

Un diagnostic contient ces champs. Les champs qui ne s’appliquent pas sont omis.

Champ Description
severity error, warning ou info
code Un code stable, lisible par une machine, par exemple mjml.invalid-child
message Une explication lisible, souvent avec une solution (« Did you mean color? »)
line, column Position dans le balisage, à partir de 1. Sources en balisage uniquement.
tag L’élément concerné par le diagnostic
attribute L’attribut, s’il y en a un
path Chemin d’indices d’enfants depuis la racine <mjml>. [0, 1] est le deuxième enfant du premier enfant.

Réponse d’erreur

L’enregistrement d’un modèle ou d’une campagne avec des diagnostics d’erreur renvoie 422. Pour cette source :

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

la réponse est :

JSON
{
  "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 (errors.content pour les campagnes) liste jusqu’à cinq messages d’erreur, avec leur ligne quand elle est connue.
  • diagnostics liste tous les diagnostics, y compris les avertissements et les informations.
  • Une source manquante ou vide renvoie 422 avec "message": "Validation failed", "errors": { "source": ["The source field is required for MJML."] } et un tableau diagnostics vide.

Valider du MJML exécute les mêmes contrôles sans enregistrer et renvoie 200 avec valid: false au lieu de 422.

Codes de diagnostic

XML (sources en balisage)

Code Gravité Signification
xml.unclosed-tag error Un élément n’est jamais fermé.
xml.unexpected-closing-tag error Une balise fermante ne correspond à aucun élément ouvert.
xml.malformed-closing-tag error Une balise fermante est illisible.
xml.unterminated-tag error Une balise ouvrante n’a pas de > fermant.
xml.unterminated-attribute error Une valeur d’attribut n’a pas de guillemet fermant.
xml.missing-attribute-value error name= n’a pas de valeur.
xml.invalid-attribute error Un caractère inattendu dans une balise.
xml.duplicate-attribute error Le même attribut deux fois sur un élément. Le premier est utilisé.
xml.unterminated-comment error Un commentaire n’a pas de -->.
xml.unterminated-cdata error Une section CDATA n’a pas de ]]>.
xml.unexpected-character error Un < isolé en dehors d’une balise terminale.
xml.multiple-roots error Plusieurs éléments racines.
xml.text-outside-root error Du texte en dehors de <mjml>.
mjml.missing-root error Le document est vide.
xml.unquoted-attribute warning Une valeur d’attribut sans guillemets.
xml.stray-text warning Du texte entre des éléments, hors de tout composant de contenu. MJML l’ignore.
xml.unexpected-declaration warning Une déclaration après le début de <mjml>.

MJML

Code Gravité Signification
mjml.unknown-tag error Pas un élément MJML 5.4.1, avec une suggestion « did you mean » quand un nom proche existe.
mjml.unknown-attribute error L’élément n’a pas cet attribut. Un simple avertissement sur <mjml> lui-même.
mjml.invalid-attribute-value error Le mauvais type de valeur : pas une couleur, pas une unité ou pas une valeur autorisée.
mjml.invalid-child error L’élément n’est pas autorisé dans son parent.
mjml.invalid-root error L’élément racine n’est pas <mjml>.
mjml.missing-body error Pas de <mj-body>.
mjml.duplicate-body error Plusieurs <mj-body>.
mjml.include-not-supported error <mj-include> n’est pas pris en charge.
mjml.missing-attribute error ou warning Un attribut obligatoire manque. Une erreur pour name et href de <mj-font>, name de <mj-class>, path de <mj-selector> et name de <mj-html-attribute>. Un avertissement pour le src d’une image et le width de <mj-breakpoint>.
mjml.missing-title warning Pas de <mj-title> dans <mj-head>.
mjml.empty-title warning <mj-title> est vide.
mjml.duplicate-head warning Plusieurs <mj-head>.
mjml.ignored-content warning Du texte dans un élément qui n’accepte pas de contenu.
mjml.ignored-children warning Des éléments enfants dans un élément qui n’accepte que du contenu.
mjml.column-widths warning Les largeurs des colonnes d’une section ou d’un groupe dépassent 100 % au total.
mjml.unknown-social-network warning Un nom d’<mj-social-element> sans icône intégrée et sans src.
mjml.script warning <script> dans le contenu. Les clients de messagerie le suppriment.
mjml.missing-preview info Pas de <mj-preview>.
mjml.missing-alt info Un <mj-image> sans alt.
mjml.button-without-link info Un <mj-button> sans href.

Temple

Code Gravité Signification
temple.unclosed-if error {{#if}} sans {{/if}}.
temple.endif-without-if error {{/if}} sans {{#if}}.
temple.else-without-if error {{else}} hors d’un bloc.
temple.duplicate-else error Deux {{else}} dans un même bloc.
temple.unclosed-expression error {{ sans }}.
temple.empty-expression error {{ }}.
temple.empty-condition error {{#if}} sans variable.
temple.malformed-else error {{else}} écrit avec des espaces ou des arguments.
temple.unsupported-block error Un bloc autre que {{#if}}, comme {{#each}}.
temple.unsupported-syntax error Triples accolades {{{…}}}, partials {{> …}} ou commentaires {{! …}}.
temple.invalid-variable warning Une variable qui n’est pas un chemin valide.
temple.invalid-condition warning Une condition qui n’est pas un chemin de variable. Les comparaisons ne sont pas prises en charge.
temple.block-crosses-components warning Un bloc qui s’ouvre dans un composant et se ferme dans un autre.

Document et compilateur

Code Gravité Signification
document.empty error La source est vide.
document.unrecognized error Ni du balisage MJML, ni du MJML JSON, ni un document MJML Emailit.
document.invalid-json error La source ressemble à du JSON mais ne peut pas être analysée.
document.invalid-node error Du MJML JSON avec un nœud mal formé.
document.too-large error La source dépasse 2 Mo.
document.unsupported-schema error Le schema_version de l’enveloppe est plus récent que ce qu’Emailit sait lire.
document.unsupported-mjml-version error La version MJML du document ne peut pas être compilée. Voir Versions et mises à niveau.
document.assumed-mjml-version info L’enveloppe n’a pas de mjml_version : la version actuelle est donc supposée.
document.mjml-upgraded info Écrit pour une autre version de MJML et compilé avec la 5.4.1.
compiler.failed error MJML n’a pas pu effectuer le rendu du document.
compiler.gmail-clipping warning Le HTML dépasse 102 Ko : Gmail le tronque donc.

Temple dans MJML

Les balises Temple traversent la compilation MJML sans modification. Emailit en effectue le rendu pour chaque destinataire au moment de l’envoi, sur le HTML compilé.

Variables dans le contenu et les attributs

Les variables fonctionnent dans le contenu et dans n’importe quel attribut :

XML
<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'}}">
  • Dans un attribut, écrivez les valeurs par défaut avec des guillemets simples : href="{{url|'https://example.com'}}".
  • Le type des valeurs d’attribut qui contiennent du Temple n’est pas vérifié, car la valeur n’est connue qu’au moment de l’envoi. Assurez-vous que la variable contient une valeur valide pour l’attribut, comme une couleur pour background-color.
  • Les valeurs sont insérées telles quelles, sans échappement HTML.

Blocs conditionnels

À l’intérieur d’un composant, placez le bloc dans son contenu :

XML
<mj-text>{{#if plan}}You are on the {{plan}} plan.{{else}}You are on the free plan.{{/if}}</mj-text>

Pour afficher ou masquer des composants entiers, placez les balises du bloc dans des éléments <mj-raw> frères :

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

Les balises de bloc isolées entre des composants sont converties en <mj-raw> lors de l’analyse du balisage : ceci revient donc au même :

XML
{{#if vip}}
<mj-section background-color="#fef3c7">
  …
</mj-section>
{{/if}}

Tout autre texte entre des composants est ignoré par MJML et signalé comme xml.stray-text.

  • Les blocs doivent être équilibrés sur l’ensemble du document. Une balise non fermée ou en trop est une erreur.
  • Ouvrez et fermez chaque bloc dans le contenu d’un seul composant, ou parmi les éléments <mj-raw> frères d’un même parent. Un bloc qui s’ouvre dans un composant et se ferme dans un autre reçoit un avertissement temple.block-crosses-components, car le masquer couperait la structure HTML.
  • Les blocs peuvent être imbriqués.

Non pris en charge

  • <mj-include> est rejeté avec mjml.include-not-supported. Collez le MJML inclus dans le document.
  • Les balises et les attributs que MJML 5.4.1 ne définit pas sont des erreurs.
  • Temple n’a ni boucles, ni helpers, ni partials, ni commentaires, ni triples accolades, ni comparaisons. Consultez Temple.

Variables par canal

Le même modèle MJML peut être envoyé depuis plusieurs endroits, et chacun fournit des variables différentes :

Envoyé depuis Variables
Envoyer un e-mail via l’API avec template L’objet variables que vous transmettez
Étape Send email d’une automatisation Automatisations de contact : les champs du contact au premier niveau ({{first_name}}, {{email}}), les champs personnalisés sous la forme {{cf.<key>}} ou {{custom_fields.<key>}}, plus {{contact.*}}, {{payload.*}} et {{meta.*}}
Campagnes MJML {{first_name}}, {{last_name}}, {{email}}, {{unsubscribe_url}}, {{cf.<key>}}, et les mêmes champs sous {{contact.*}}

Les éditeurs insèrent les champs personnalisés sous la forme {{cf.<key>}}, qui fonctionne dans les campagnes MJML et dans les automatisations. Pour les envois via l’API, transmettez vous-même les variables.

Pour prévisualiser la version d’un destinataire, appelez Effectuer le rendu de MJML avec variables.

Campagnes

Une campagne avec content_type: "mjml" enregistre son MJML dans content, dans l’un des formats de source, et Emailit compile son html. Comme pour les modèles, tout html que vous envoyez est ignoré. Un MJML invalide renvoie 422 avec errors.content et diagnostics. Envoyer un content vide efface à la fois le contenu et le HTML. Les réponses des campagnes incluent le même objet mjml que les modèles.

Les campagnes MJML effectuent le rendu de l’objet, du HTML et du texte avec Temple pour chaque destinataire, envois de test compris. Ces variables sont disponibles :

Variable Valeur
{{first_name}} Prénom du contact
{{last_name}} Nom du contact
{{email}} Adresse e-mail du contact
{{unsubscribe_url}} Lien de désinscription pour ce contact et cette campagne
{{cf.<key>}} Champ personnalisé du contact, par exemple {{cf.company}}
{{contact.first_name}}, {{contact.cf.<key>}}, … Les mêmes champs sous contact

Les champs vides du contact comptent comme manquants, et les valeurs par défaut s’appliquent donc : {{first_name|"there"}} donne there pour un contact sans prénom. Gardez un lien {{unsubscribe_url}} dans le pied de page des e-mails marketing.

Les campagnes classiques (HTML, texte et les autres éditeurs) conservent les balises de fusion fixes :

Campagnes classiques Campagnes MJML
Moteur Balises de fusion fixes Temple
{{#if}} … {{else}} … {{/if}} Non traité Pris en charge
Valeurs par défaut comme {{first_name|"there"}} Non traitées Prises en charge. Les champs vides comptent comme manquants.
Casse {{FIRST_NAME}} fonctionne Les chemins sont sensibles à la casse
Balises inconnues Laissées telles quelles dans le message Rendues vides

Dans le tableau de bord, créer une campagne à partir d’un modèle MJML copie le document MJML du modèle dans la campagne.

Sans accès à MJML

Pendant l’alpha, Emailit ne compile le MJML des campagnes que pour l’équipe Emailit. Pour tous les autres, y compris les clés API, content_type: "mjml" reste le simple libellé qu’il était avant l’alpha : content est enregistré tel que vous l’envoyez, vous envoyez le HTML compilé dans html, et les envois utilisent les balises de fusion classiques. Créer une campagne à partir d’un modèle MJML copie le HTML du modèle dans une campagne HTML.

Automatisations

L’étape Send email fait référence à un modèle par son ID (tem_…). Les modèles MJML fonctionnent comme les autres : l’étape envoie le HTML compilé du modèle et effectue le rendu de Temple avec les variables de l’automatisation. Consultez E-mails des automatisations.

Dans les paramètres de l’étape, Design a new email crée un modèle MJML à partir d’un design de départ, le sélectionne pour l’étape et l’ouvre dans l’éditeur visuel. Edit email ouvre le modèle MJML sélectionné. Les modifications portent sur le modèle lui-même : chaque étape et chaque appel API qui utilise ce modèle les reçoit donc. Sans accès à MJML, l’étape affiche à la place un lien vers le modèle.

Édition collaborative

Toutes les personnes qui ouvrent le même modèle ou la même campagne MJML enregistrés modifient un même brouillon partagé en temps réel, dans l’un ou l’autre éditeur :

  • Présence : l’en-tête indique qui d’autre modifie le document et ce que chacun fait. Dans l’éditeur visuel, vous voyez leurs sélections, leurs curseurs et, là où ils modifient quelque chose, une brève surbrillance de leur couleur. Layers indique qui a sélectionné un composant. Sélectionnez l’avatar d’une personne pour accéder à sa sélection.
  • Fusion des modifications : les modifications de composants, d’attributs ou de parties de texte différents se combinent au lieu de s’écraser. Pendant qu’une personne saisit un texte sur le canevas, ce texte est verrouillé pour les autres.
  • Éditeur de code : vos modifications sont fusionnées dans le brouillon partagé au fil de la saisie. Les modifications des autres apparaissent dans votre code dès que vous faites une pause dans la saisie, pour que votre curseur ne saute pas. Si votre code contient une erreur de syntaxe, elles attendent que vous la corrigiez.
  • Annuler et rétablir n’annulent que vos propres modifications.
  • Enregistrement : il n’y a qu’un seul Save pour tout le monde. L’en-tête indique les modifications non enregistrées de l’ensemble du brouillon, et qui a enregistré en dernier. L’envoi utilise toujours la version enregistrée.
  • Le brouillon est conservé : fermer l’éditeur ou perdre la connexion ne fait pas perdre les modifications. Elles restent dans le brouillon partagé et se synchronisent quand vous êtes de nouveau en ligne. Rouvrir l’éditeur restaure les modifications non enregistrées, et vous pouvez les abandonner pour revenir à la version enregistrée.
  • Enregistré ailleurs : quand le modèle ou la campagne est enregistré en dehors de l’éditeur (l’API, MCP ou Edit with AI) pendant qu’il est ouvert, un brouillon sans modifications non enregistrées passe à la version enregistrée. Un brouillon avec des modifications non enregistrées les conserve et propose Load saved version ou Keep this draft.
  • Supprimé : si le modèle ou la campagne est supprimé, ou n’est plus en MJML, pendant que vous le modifiez, l’éditeur vous prévient et vous permet de copier le MJML.

L’édition collaborative nécessite un MJML enregistré et valide. Un modèle ou une campagne dont le MJML ne peut pas être analysé, ou qui n’est pas encore enregistré en MJML, s’ouvre sans elle : chaque personne modifie seule, et le dernier enregistrement l’emporte. L’éditeur l’indique dans une bannière. Dans un espace de travail suspendu, les éditeurs sont en lecture seule.

Versions et mises à niveau

Emailit compile avec une seule version de MJML à la fois, actuellement la 5.4.1. Chaque document enregistré indique la version de MJML qu’il vise (mjml_version), et Emailit la vérifie chaque fois que le document est compilé :

mjml_version du document Résultat
5.4.1 Compilé tel quel
Absent La 5.4.1 est supposée (document.assumed-mjml-version, info)
Une autre version 5.x Compilé avec la 5.4.1 (document.mjml-upgraded, info)
4.x Migré vers MJML 5, puis compilé avec la 5.4.1 (document.mjml-upgraded, info). MJML 4 et 5 partagent les mêmes composants et attributs ; le HTML produit diffère légèrement.
3.x ou antérieure Rejeté avec document.unsupported-mjml-version
Une version majeure plus récente Rejeté avec document.unsupported-mjml-version

Un document dont le schema_version est plus récent que ce qu’Emailit sait lire est rejeté avec document.unsupported-schema. L’enregistrement stocke le document avec les valeurs actuelles de mjml_version et de schema_version. Vérifiez l’aperçu après une mise à niveau.

Les éditeurs affichent leur version et leur journal des modifications. Quand un document a été enregistré avec une version d’éditeur plus récente que celle de la page que vous avez ouverte, l’éditeur vous demande de recharger la page.

MJML pour les agents IA

Récupérer la référence MJML fournit à vos outils et aux modèles d’IA ce dont ils ont besoin pour écrire du MJML valide pour Emailit : chaque composant avec ses parents, ses enfants et ses attributs autorisés (type et valeur par défaut), le guide Temple, des règles d’écriture et un reference_text compact en texte brut pour les prompts.

Sur le serveur MCP, les sessions de l’équipe Emailit disposent aussi de ces outils dans le groupe d’outils templates :

Outil Description
get-mjml-reference La référence sous forme de texte : les versions de MJML et des éditeurs, les règles d’écriture, le guide Temple et la référence des composants.
validate-mjml Valider du MJML : valid et les diagnostics.
render-mjml Effectuer le rendu de MJML : le HTML compilé et, avec variables, rendered_html.
create-template, update-template Acceptent aussi editor: "mjml" et source, le balisage MJML ou le MJML JSON sous forme de chaîne. Emailit compile le HTML.
create-campaign, update-campaign Acceptent aussi content_type: "mjml" avec le MJML dans content.

Quand un enregistrement échoue à la validation, l’erreur de l’outil liste les diagnostics d’erreur et d’avertissement avec leurs numéros de ligne, pour que l’agent puisse corriger la source. Un déroulement type : lire la référence, écrire le MJML, appeler validate-mjml jusqu’à ce que valid vaille true, enregistrer avec create-template, puis vérifier la version d’un destinataire avec render-mjml. Les autres sessions ne voient ni ces outils ni ces paramètres.

Dans le tableau de bord

  • Modèles : créez un modèle et choisissez MJML Visual Editor (Alpha) ou MJML Code Editor (Alpha).
  • Éditeur visuel : glisser-déposer sur le rendu de l’e-mail, une arborescence de calques, un panneau de propriétés pour chaque attribut MJML, les paramètres du document (head, polices, styles et attributs par défaut), des variables Temple dans n’importe quelle propriété et des blocs conditionnels autour des composants.
  • Éditeur de code : autocomplétion des balises, attributs et valeurs MJML et de Temple, validation dans le code avec corrections rapides, et mise en forme.
  • Les deux éditeurs : un aperçu en direct sur ordinateur et mobile, compilé dans le navigateur avec MJML 5.4.1, un aperçu avec des données d’exemple (avec rendu de Temple), une liste des problèmes et un assistant IA quand il est activé. Vous pouvez basculer entre Visual et Code sur le même document ; passer en Visual nécessite un code sans erreur de syntaxe. L’enregistrement est bloqué tant que le MJML contient des erreurs.
  • Édition collaborative : les collègues qui ouvrent le même modèle ou la même campagne le modifient en temps réel. Consultez Édition collaborative.
  • Edit with AI : décrivez une modification d’un modèle ou d’une campagne MJML sans ouvrir l’éditeur.
  • Import : un fichier .mjml, un fichier .json en MJML JSON ou en document MJML Emailit, ou un ZIP avec template.mjml et un dossier images/ à la racine.
  • Export : MJML (balisage), MJML JSON (le document enregistré), HTML, ou un ZIP avec template.mjml, template.html et images/. L’export fonctionne pour tout le monde.
  • Campagnes : choisissez l’éditeur MJML Visual ou Code pour le contenu de la campagne.
  • Automatisations : concevez sur place l’e-mail d’une étape Send email. Consultez Automatisations.

Cette page vous a-t-elle été utile ?

Merci pour votre retour.

Merci, nous lisons chaque message.