Envoyables
@bext-stack/framework/mail crée des e-mails transactionnels à la manière de Laravel Mailable : vous décrivez une spécification structurée (salutation, paragraphes, bouton d'appel à l'action, salutation) et renderMailable renvoie un e-mail HTML réactif de style en ligne plus une alternative en texte brut — pas de MJML, pas d'étape de construction.
Quand l'utiliser#
- Tout email transactionnel qui mérite d’avoir l’air conçu : reçus, bienvenue mails, réinitialisations de mot de passe, factures.
- Chaque fois que vous souhaitez que les versions HTML et texte brut restent synchronisées.
Rendu#
import { renderMailable } from "@bext-stack/framework/mail";
const msg = renderMailable({
subject: "Your receipt",
greeting: "Hi Ada,",
intro: ["Thanks for your order — here's your receipt."],
action: { text: "View receipt", url: "https://app/receipt/42" },
outro: ["If you didn't make this purchase, contact support."],
salutation: "— The Shop",
brand: { name: "Shop", color: "#16a34a", footer: "© Shop 2026" },
});
// msg: { subject, html, text }
Le résultat est exactement la forme { subject, html, text } que tout ce qui veut en aval : transmettez-la au point de terminaison de messagerie du SDK ou renvoyez-la à partir d'une notification.
toMail:
import { renderMailable } from "@bext-stack/framework/mail";
const Receipt = {
via: () => ["mail"],
toMail: (u) => renderMailable({ subject: "Receipt", greeting: `Hi ${u.name},`, /* … */ }),
};
Spécification#
| Champ | But |
|---|---|
subject |
le sujet de l'e-mail |
greeting |
ligne d'ouverture ( "Hi Ada," ) |
intro[] |
paragraphes avant le bouton |
action |
un CTA { text, url } (un bouton stylisé) |
outro[] |
paragraphes après le bouton |
salutation |
ligne de clôture |
brand |
{ name?, color?, footer? } — en-tête + accent + pied de page |
Sécurité#
Le contenu utilisateur est avec échappement HTML dans la sortie HTML, les URL d'action sont validées sur http(s) (une URL javascript: devient # ), et la couleur d'accent de la marque est validée à une valeur hexadécimale - donc un mailable construit à partir de l'entrée de l'utilisateur ne peut pas injecter balisage ou scripts dans l’e-mail.
Essayez-le#
Le démo des mailables en direct compose un e-mail à partir d'un formulaire et affiche à la fois l'aperçu HTML rendu et la version en texte brut. Source dans sites/demo/src/app/examples/mail/page.tsx.
Voir aussi#
- Notifications — diffusez le mailable sur tous les canaux.
- Courrier — la fonctionnalité de messagerie Rust en dessous.
- Boîte à outils de candidature — le reste de la couche d'application TypeScript.