Command Palette

Search for a command to run...

Logo mailcraft

mailcraft

09.2026 - Present

  • Stars GitHub
  • Téléchargements cumulés crates.io
  • Rust
  • Handlebars
  • proc-macro
  • Serde
Capture d'écran de mailcraft

Description du projet

mailcraft est un moteur de templates d'emails pour Rust, vérifié à la compilation. Son accroche : "Missing template? Build error, not a crash."

La plupart des bibliothèques d'emails s'occupent de l'envoi. mailcraft s'occupe de ce qui vient avant : définir, organiser et rendre les templates. La derive #[derive(EmailTemplate)] transforme un enum en registre de templates. Chaque variante correspond à un dossier de trois fichiers Handlebars (subject.hbs, body.html.hbs, body.txt.hbs), et la macro génère un include_str! pour chacun. Une variante ajoutée sans ses fichiers fait échouer la compilation.

Le dossier par défaut est le nom de la variante en snake_case, modifiable avec #[email_template(path = "...")]. Chaque template est soit un event (transactionnel : réinitialisation de mot de passe, facture), soit une campaign (newsletter, promotion), et l'enum expose slug(), kind() et all() pour l'introspection.

Le TemplateEngine rend le sujet, le corps HTML et le corps texte en un appel. Le mode strict de Handlebars est actif par défaut : une variable absente fait échouer le rendu au lieu de laisser un trou dans l'email. Le HTML est échappé, le sujet et le texte ne le sont pas. mailcraft ajoute un helper default pour les valeurs de repli et accepte des helpers et partials personnalisés.

Les templates se déclinent par langue avec #[email_template(locales = ["fr", "en"], default_locale = "fr")] sur l'enum. Chaque langue déclarée doit avoir ses fichiers, sinon la compilation échoue, et une langue non déclarée retombe sur la langue par défaut.

mailcraft fournit deux templates de base prêts à l'emploi : une mise en page HTML en tables, compatible Outlook, responsive et avec mode sombre, et son équivalent texte. En staging, une fonction redirige tous les emails vers une seule boîte, avec un tag +hash SHA-256 déterministe par destinataire d'origine : personne n'est contacté par erreur, et chaque email reste traçable.

mailcraft n'envoie rien lui-même. Il suffit d'implémenter le trait EmailSender pour brancher lettre (SMTP), une API HTTP comme SendGrid ou Resend, ou un Vec dans les tests.

mailcraft est open source sous licence MIT. Il est publié sur crates.io en deux crates : mailcraft et mailcraft-derive (la macro, réexportée par mailcraft). Installation : cargo add mailcraft.

Technologies utilisées

Ce projet utilise les technologies suivantes : Rust, Handlebars, proc-macro, Serde.