React Email
React Email を使うと、メールテンプレートを React コンポーネントとして書けます。Node SDK は、オプションのピア依存関係 @react-email/render を通じて、レンダリングを代わりに行います。
-
パッケージをインストールします。
ターミナルウィンドウ npm install @spacepost/node @react-email/components @react-email/render react react-dom -
テンプレートを書きます。
emails/welcome.tsx import { Html, Head, Body, Container, Heading, Text, Button, Preview } from "@react-email/components";export default function WelcomeEmail({ name, url }: { name: string; url: string }) {return (<Html><Head /><Preview>Welcome to Acme</Preview><Body style={{ backgroundColor: "#f6f9fc", fontFamily: "system-ui, sans-serif" }}><Container style={{ backgroundColor: "#fff", padding: 32, borderRadius: 8 }}><Heading>Welcome, {name}</Heading><Text>Your account is ready.</Text><Button href={url} style={{ background: "#0e9f7a", color: "#fff", padding: "10px 20px", borderRadius: 6 }}>Open dashboard</Button></Container></Body></Html>);} -
reactオプションを指定して送信します。send.tsx import { SpacePost } from "@spacepost/node";import WelcomeEmail from "./emails/welcome";const spacepost = new SpacePost(process.env.SPACEPOST_API_KEY);const { data, error } = await spacepost.emails.send({from: "Acme <hello@acme.com>",to: "user@example.com",subject: "Welcome to Acme",react: <WelcomeEmail name="Ada" url="https://app.acme.com" />,});
SDK は HTML とプレーンテキスト版をレンダリングします。html や text も同時に渡した場合は、そのフィールドでは渡した値が優先されます。
Resend SDK を SpacePost に向けて使う場合(Resend からの移行をご覧ください)、SDK が送信前にレンダリングするため、react オプションは Resend と同じように動作します。