渲染器-邮件-html
插头 für renderer-foundation. 招标 RenderRequest { kind: "mail" } zu Betreff + 电子邮件安全 HTML + 纯文本 : 邮件模板( Dokumment- HTML +) meta.subject) - > 等离子管- > MJML-Layout - > html- to- text。 。 。 .
管道
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 格式化的纳克 payload.locale, der Sprache der Vorlage, im langen Datumsformat ("1. Oktober 2026"). ctx.config (可选的)活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活活 tenantName (Branding-Titel); 欧恩·克菲克·格尔滕 EUR ưμ㼯a ""。 。 。 .
挂载
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
];
邮件- Texte kommen aus r.notification({ variables, template, meta })· ; applyBootSeeds (原始内容存档于2018-03-31) (英语). Legt Sie als System-Templates an.
调用程序
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,
});
租户
Ein 租户 legt ein eigenes 布局等模板 kind: "mail-layout", (中文(简体) ), contentFormat: "mjml"缩写 default (奥德·德·斯卢克) meta.layoutSlug一个。 Es gewint gegen System-Layout un-d in-code 默认值 。 Das 布局 sieht nur die oben genannten 变量; den body setzt es mit {{{content}}} 爱因.
可选种子
import { seedSystemMailLayout } from "@cosmicdrift/kumiko-renderer-mail-html/seeding";
await seedSystemMailLayout(db); // idempotent
(原始内容存档于2018-10-21) (英语). Oohne Seeding läuft das 插件trotzdem und fällt auf DEFAULT_MAIL_LAYOUT_MJML z克.
范围外
- 视觉编辑版式
- 内置-图像-图像化(CID-Attachments)
- PDF/图像 - > Andere插件(
renderer-puppeteer-client(中文(简体) ) - 邮件 - Versand - >
delivery+ 键channel-email+ 键mail-transport-*