Envello
Tutorial

Building transactional email templates with React Email

Envello Team·2026-07-17·5 min read

React Email lets you write email templates as React components, using a constrained set of layout primitives (Body, Container, Heading, Text, and similar) that render down to email-client-safe HTML, rather than hand-writing table-based HTML yourself. The integration point with Envello is simple: render() the component to a string, send that string as the html field.

Structuring templates for real transactional use, not just the demo

The quickstart examples usually show one component per email. For a real product with several transactional email types (welcome, password reset, receipt, shipping notification), it's worth extracting shared pieces, a header/logo component, a footer with your address and support link, a base layout wrapping all of them, so each individual email template only contains what's actually unique to it.

Passing dynamic content in

Since these are just React components, dynamic content is plain props: render(<ReceiptEmail orderNumber={order.id} amount={order.total} items={order.lineItems} />). This is one real advantage over a string-templating approach, you get type checking on what a given template actually needs, and a missing required prop is a build-time error instead of a blank spot in a production email.

Previewing before you send

React Email's own dev server (npx react-email dev) renders your templates in a local preview with live reload, so you can check layout and content across different sample props without actually sending a test email for every iteration. Save the real send-and-check-the-inbox step for final verification of client rendering quirks, not for routine content and layout changes during development.

Envello

EU-hosted transactional email, done right by default.