Team invitation
Render an invitation identifying the inviter and team without granting membership by email.
This application recipe uses the shared transactional layout. It returns a rendering Effect containing HTML and plain text; it does not submit email or implement the business operation.
import { renderReactEmail } from "@corven/email-sdk/react";
import { transactionalEmailLayout } from "./react-layout.js";
export const teamInviteEmail = (input: { teamName: string; inviter: string; inviteUrl: string }) =>
renderReactEmail(
transactionalEmailLayout({
heading: "Join your team",
preview: "You have a team invitation.",
paragraphs: [
`${input.inviter} invited you to ${input.teamName}.`,
"Review the invitation before joining.",
],
action: { href: input.inviteUrl, label: "Review invitation" },
}),
);
Supply authorized data
Bind the invitation to the intended organization and recipient. Check membership and authorization when the link is used; email delivery itself must not grant access.
Keep URLs and template inputs under host control. React text escaping is not URL validation or a consent check. Treat the rendered body as private message content.
Send the rendered body
Yield the rendering Effect in your application, then supply its body to Email.send with explicit sender and recipients. Apply ordinary provider validation, submission policy and any required approval. The React integration shows this composition.
These recipes are application examples, not additional template exports from the SDK. Rendering and compilation do not establish delivery or compatibility with every email client.