@cosmicdrift/kumiko-renderer-mail-html

中文文档
0.419.0发布于 2026/11/11MITTypeScriptES Module构建来源已验证近 30 天下载 1.9万

Renderer-Foundation plugin for branded HTML emails: mail-kind templates (document HTML + subject meta) rendered with isolated Handlebars into an MJML layout, plus plain text via html-to-text. Templates resolved from template-resolver.

原始使用文档
文档目录6 节
  1. Pipeline
  2. Mount
  3. Caller-Pattern
  4. Tenant-Branding
  5. Optionales Seeding
  6. Out-of-Scope

renderer-mail-html

Plugin für renderer-foundation. Rendert RenderRequest { kind: "mail" } zu Betreff + Email-safe HTML + plain-text: Mail-Template (Dokument-HTML + meta.subject) -> isolierter Handlebars -> MJML-Layout -> html-to-text.

Pipeline

RenderRequest { kind: "mail", payload: { slug, locale, variables, unsubscribeUrl? } }
                            ↓
   1. Template laden      resolveTemplate(slug, kind "mail", locale), nur contentFormat html,
                          meta.subject Pflicht
   2. Layout laden        meta.layoutSlug ?? "default", kind "mail-layout";
                          tenant -> system -> in-code DEFAULT_MAIL_LAYOUT_MJML
   3. Body kompilieren    compileDocumentBodyToHandlebars (template-resolver): span[data-variable],
                          Links, Listenzeilen -> Handlebars-Quelle; Autoren-Klammern sind inert
   4. Rendern             Handlebars.create() mit Helfern money/date/link, HTML-Escaping an;
                          Betreff + Preview-Text ohne Escaping, CR/LF entfernt
   5. Layout              Body als Datum (`{{{content}}}`), nie in die Layout-Quelle konkateniert;
                          Layout-Kontext nur: content, subject, previewText, tenantName,
                          signature, imprint, unsubscribeUrl
   6. mjml + html-to-text
                            ↓
   RenderResponse { kind: "mail", subject, html, text, previewText? }

Datum und Zahlen formatiert der Renderer nach payload.locale, der Sprache der Vorlage, im langen Datumsformat („1. Oktober 2026“). ctx.config (optional) liefert die Währung (tenant-settings) und tenantName (Branding-Titel); ohne Config gelten EUR und "".

Mount

import { createRendererMailHtmlFeature } from "@cosmicdrift/kumiko-renderer-mail-html";
import { createTemplateResolverFeature } from "@cosmicdrift/kumiko-bundled-features/template-resolver";
import { createRendererFoundationFeature } from "@cosmicdrift/kumiko-bundled-features/renderer-foundation";

const features = [
  createTemplateResolverFeature(), // Vorausgesetzt
  createRendererFoundationFeature(), // Vorausgesetzt
  createRendererMailHtmlFeature(), // Dieses Plugin
];

Mail-Texte kommen aus r.notification({ variables, template, meta }); applyBootSeeds legt sie als System-Templates an.

Caller-Pattern

const foundation = requireRendererFoundation(ctx, "sendWelcomeMail");
const renderer = foundation.createRendererForTenant({ tenantId, kind: "mail" });

const result = await renderer.render(
  {
    kind: "mail",
    payload: {
      slug: "my-feature:notify:welcome",
      locale: "de",
      variables: { name: user.name, verifyUrl: "https://..." },
    },
  },
  { db: ctx.db, registry: ctx.registry, tenantId, config: ctx.config },
);

await ctx.mailTransport.send({
  to: user.email,
  subject: result.subject,
  html: result.html,
  text: result.text,
});

Tenant-Branding

Ein Tenant legt ein eigenes Layout als Template kind: "mail-layout", contentFormat: "mjml", Slug default (oder den Slug aus meta.layoutSlug) an. Es gewinnt gegen System-Layout und in-code Default. Das Layout sieht nur die oben genannten Variablen; den Body setzt es mit {{{content}}} ein.

Optionales Seeding

import { seedSystemMailLayout } from "@cosmicdrift/kumiko-renderer-mail-html/seeding";

await seedSystemMailLayout(db); // idempotent

Ohne Seeding läuft das Plugin trotzdem und fällt auf DEFAULT_MAIL_LAYOUT_MJML zurück.

Out-of-Scope

  • Visual-Editor für Layouts
  • Inline-Image-Embedding (CID-Attachments)
  • PDF/Image -> andere Plugins (renderer-puppeteer-client)
  • Mail-Versand -> delivery + channel-email + mail-transport-*

版本与发布记录

@cosmicdrift/kumiko-renderer-mail-html 共发布 63 个版本,首次发布于 2026/10/17;过去 12 个月发布了 63 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.419.0latest2026/11/11今天
0.418.02026/11/101 天前
0.417.02026/11/091 天前
0.416.02026/11/082 天前
0.415.02026/11/064 天前
0.414.02026/11/055 天前

关于 @cosmicdrift/kumiko-renderer-mail-html 的常见问题

@cosmicdrift/kumiko-renderer-mail-html 是什么?

Renderer-Foundation plugin for branded HTML emails: mail-kind templates (document HTML + subject meta) rendered with isolated Handlebars into an MJML layout, plus plain text via html-to-text. Templates resolved from template-resolver.

如何安装 @cosmicdrift/kumiko-renderer-mail-html?

在项目目录运行 npm install @cosmicdrift/kumiko-renderer-mail-html,或使用 pnpm add / yarn add / bun add。

@cosmicdrift/kumiko-renderer-mail-html 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@cosmicdrift/kumiko-renderer-mail-html 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@cosmicdrift/kumiko-renderer-mail-html 可以商用吗?

@cosmicdrift/kumiko-renderer-mail-html 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@cosmicdrift/kumiko-renderer-mail-html 的下载量有多少?

根据 npm 官方下载统计,@cosmicdrift/kumiko-renderer-mail-html 在 2026/10/11 – 2026/11/09 这 30 天内被下载 18,825 次,日均约 628 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@cosmicdrift/kumiko-renderer-mail-html 还在维护吗?

最新版本 0.419.0 发布于 2026/11/11(今天);至今共发布 63 个版本,其中过去 12 个月发布了 63 个;首次发布于 2026/10/17。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。