JA
ベータ版の翻訳

@core / email

1.0.0 ▾
認証済みMIT
GitHub

型付き React Email テンプレートによるトランザクションメール:Resend、SMTP、開発時はコンソール

コード9 ファイルコンテキスト約 544 トークンスキャン合格

.genpmignore 適用後に組み込まれる正確なツリーです。固定先:

src/lib/email/send.ts読み取り専用 · 3e2976e
// sendEmail tipado por plantilla: el nombre elige las props obligatorias.
import { render, toPlainText } from '@react-email/render';
import { defaultProvider, type EmailProvider, type SendResult } from './providers.js';
import { type MagicLinkProps, magicLink } from './templates/magic-link.js';
import { type ReceiptProps, receipt } from './templates/receipt.js';
import { type WelcomeProps, welcome } from './templates/welcome.js';

export const templates = { welcome, magicLink, receipt } as const;
export type TemplateProps = { welcome: WelcomeProps; magicLink: MagicLinkProps; receipt: ReceiptProps };
export type TemplateName = keyof TemplateProps;

let provider: EmailProvider | null = null;

export function setEmailProvider(p: EmailProvider): void {
  provider = p;
}

export function getEmailProvider(): EmailProvider {
  provider ??= defaultProvider();
  return provider;
}

export async function renderEmail<K extends TemplateName>(name: K, props: TemplateProps[K]): Promise<{ subject: string; html: string; text: string }> {
  const t = templates[name] as unknown as { subject(p: TemplateProps[K]): string; render(p: TemplateProps[K]): Parameters<typeof render>[0] };
  const html = await render(t.render(props));
  return { subject: t.subject(props), html, text: toPlainText(html) };
}

export async function sendEmail<K extends TemplateName>(
  name: K,
  opts: { to: string | string[]; props: TemplateProps[K]; replyTo?: string; from?: string },
): Promise<SendResult> {
  const from = opts.from ?? process.env.EMAIL_FROM;
  if (!from) throw new Error('EMAIL_FROM is not set (e.g. "App <hello@example.com>")');
  const { subject, html, text } = await renderEmail(name, opts.props);
  return getEmailProvider().send({ from, to: opts.to, subject, html, text, ...(opts.replyTo ? { replyTo: opts.replyTo } : {}) });
}

@core/email を報告

パッケージを報告するには GitHub でログインしてください。

GitHub で続ける