Giter VIP home page Giter VIP logo

html-email-template's Introduction

Créer et tester des emails html

création | test

Ressources

+/-

MJML

MJML est un langage de balisage open-source créer par Mailjet.
Grâce à une syntaxe simple et un ensemble de composants, MJML permet de rapidement créer des emails HTML responsive et directement compatibles avec une grande majorité de clients mail.
C'est le moteur MJML qui se charge de compiler le template en HTML.

code

Documentation

https://documentation.mjml.io/

Utilisation

MJML dispose de nombreuses options d'utilisations :

Exemple d'intégration dans un projet avec la gem MJML-Rails qui permet d'injecter des données dynamiques :

<!-- ./app/views/user_mailer/_info.html.erb -->
<mj-text>This is <%= @user.username %></mj-text>

<!-- ./app/views/user_mailer/email.html.mjml -->
<mjml>
  <mj-head>
    <mj-preview>Hello World</mj-preview>
  </mj-head>
  <mj-body>
    <mj-section>
      <mj-column>
        <mj-text>Hello World</mj-text>
        <%= render partial: "info" %>
      </mj-column>
    </mj-section>
  </mj-body>
</mjml>

⚠️ Il est préférable de générer une version HTML minifiée car elle supprime les attributs style vides qui peuvent poser problème sur Outlook.

En pratique

Structure :

<!-- balise principale -->
<mjml>
  <!-- métadonnées + styles -->
  <mj-head>
    <!-- texte de l'onglet navigateur -->
    <mj-title></mj-title>
    <!-- texte d'aperçu dans la boite mail -->
    <mj-preview></mj-preview>
    <!-- attributs par défaut des balises MJML + class -->
    <mj-attributes>
      <mj-all padding="0" />
      <mj-text font-size="18px" line-height="24px" />
      <mj-class name="header" font-size="48px" />
    </mj-attributes>
    <!-- styles appliqués au HTML généré -->
    <mj-style>
      .primary div {
        color: tomato !important;
      }
    </mj-style>
  </mj-head>
  
  <!-- corps du mail -->
  <mj-body>
    <!-- division verticale -->
    <mj-section>
      <!-- division horizontale -->
      <mj-column>
        <mj-text mj-class="header">Hello World !</mj-text>
        <mj-text css-class="primary">Lorem ipsum dolor sit amet...</mj-text>
      </mj-column>
    </mj-section>
  </mj-body>
</mjml>

Style :

MJML va générer une structure de plusieurs éléments HTML en convertissant un composant.
⚠️ Une <css-class> est toujours appliquée à l'élément parent. Pour appliquer correctement un style il va donc parfois être nécessaire d'inspecter le code généré pour cibler le bon élément enfant.
⚠️ Comme les styles inline sont très utilisés dans les emails HTML il est indispensable de toujours ajouter !important.

specificity
specificity.mjml : règles de spécificité.


Unitées :

La largeur des <mj-column> est en pourcentages (%) mais pour tout le reste il semble préférable de rester en pixels (px).
Un exemple : Outlook va transformer un padding définit en pourcentages... en pouces, et d'une façon étrange.
L'unité em peut également être utilisée sur tout les clients mail (source).


Formats d'images :

  • .gif(pas d'animation sur Outlook)
  • .png (même avec alpha)
  • .jpeg
  • Pas de .svg 🚫
    source

⚠️ Donnez à chaque élément <mj-image> décoratif un attribut alt vide : alt=""


Responsive :

MJML met à disposition un composant <mj-column> au comportement responsive.
Placés dans une <mj-section>, les <mj-column> se partagent sa largeur sur desktop et vont automatiquement s'empiler verticalement sur mobile. La largeur des <mj-column> est définie en pourcentage sans que la somme ne dépasse les 100%. Par défaut l'espace est réparti uniformément sur chaque <mj-column>.
Un composant <mj-group> englobant des <mj-column> va annuler ce comportement responsive pour les grader côte à côte sur mobile.

columns
columns.mjml : layout en 2 colonnes.


CSS Media query

Support : plutôt bon.
Il faut bien les placer dans une balise <mj-style> SANS l'attribut <inline>. Vous pouvez créer plusieurs balises <mj-style> dans <mj-head>.
⚠️ Utilisez la règle !important sur chaque propriété.

<mj-head>
  ...
  <mj-style inline="inline">
    .mobile table {
      display: none !important;
      mso-hide: all;
    }
  </mj-style>

  <!-- mj-style SANS l'attribut inline -->
  <mj-style>
    @media (max-width: 480px) {
      .paragraph div {
        font-size: 16px !important;
        color: tomato !important;
      }
      .desktop table {
        display: none !important;
        mso-hide: all;
      }
      .mobile table {
        display: table !important;
      }
    }
  </mj-style>
</mj-head>

media_query
media_query.mjml : afficher/masquer des images différentes sur mobile et desktop et appliquer différents styles à un même élément.


Police distante

Support : très mauvais.
Utilisez la balise <mj-font> dans <mj-head> et pointez l'attribut href vers un fichier contenant la déclaration @font-face de la police (ex : Creepster).

<mj-head>
  ...
  <mj-font name="Creepster" href="https://fonts.googleapis.com/css2?family=Creepster" />
  ...
</mj-head>

<mj-body>
  ...
  <mj-section>
    <mj-column>
      <mj-text font-family="Creepster, sans-serif">
        custom font
      </mj-text>
    </mj-column>
  </mj-section>
  ...
</mj-body>

custom_font
custom_font.mjml : appliquer une police distante.


Image de fond (fenêtre client)

Support : bon... sauf sur Outlook (Windows) mais possibilité de faire mieux directement dans le html.
Utilisez l'attribut full-width="full-width" sur la balise <mj-wrapper> et pointez l'attribut background-url vers le fichier image.

  <mj-body>
    <mj-wrapper background-url="./assets/pattern.png" background-size="400px">
      ...
    </mj-wrapper>
  </mj-body>

background_image
background_image.mjml : appliquer une image de fond sur toute la fenêtre du client.


Exemple de template

template
template.mjml : template utilisant différents composants MJML.


Testi@

Une fois le template généré il faut impérativement le tester et c'est ce que propose le site testi.at grâce à l'aperçu de plus de 90 clients mail sur desktop, mobile et webmail.

Utilisation

Éditeur

Testi@ dispose lui aussi d'un éditeur avec sa preview.
Il suffit de créer un nouveau test (1), coller le code html dans l'éditeur (2), sélectionner les clients mail (3) dans la liste et de lancer le test (4).
L'interface permet aussi de nouveau test éditeur clients


Réception d'email

Vous pouvez aussi recevoir des emails sur votre alias de compte.
C'est pratique pour tester une campagne MailChimp par exemple.
Depuis l'onglet Settings / Profile, vous pouvez copier l'adresse et vous connecter pour recevoir le mail qui va lancer le test automatiquement.
settings


Aperçus

Enfin, l'interface de présentation des captures d'écrans permet de visualiser le rendu du mail sur les différents clients.
Vous pouvez déplier/replier toutes les fenêtres d'aperçus (1), parfois visualiser le code source (2) et relancer un client (3).
preview

html-email-template's People

Contributors

v-dj avatar

Stargazers

 avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.