14 SaaS Product Emails — Sonar / Lifecycle

Free React Email Cancellation Template

Confirms without arguing, gives the dates, and puts the data export first. Customize it in the free React Email playground and export production-ready TSX — no sign-up.

Sample subject
Your Sonar subscription is canceled
Format
React Email TSX · Free
Cancellation React Email template preview

Template details

What this cancellation template includes

Confirms without arguing, gives the dates, and puts the data export first. Customize it in the free React Email playground and export production-ready TSX — no sign-up. The source is standard TypeScript and React Email, so it can be sent with Resend or rendered to HTML for another email provider.

  • Production-ready lifecycle email structure
  • Editable in the visual React Email playground
  • Free TSX source for personal and commercial projects

How to use it

  1. 1. Customize the copy and styles in the playground above.
  2. 2. Export or copy the typed TSX source.
  3. 3. Pass dynamic props and send it from a server route with your email provider.
Follow the Resend and Next.js implementation guide

React Email TSX source

Free for personal, commercial, and client projects under the site license.

View full source code
import * as React from 'react';

import {
  Band,
  BodyText,
  Brand,
  colors,
  CTAButton,
  DataRow,
  DataTable,
  Display,
  EmailLayout,
  InlineLink,
  Kicker,
  Lead,
  Note,
} from './components';

export interface CancellationEmailProps {
  brand?: Brand;
  subject?: string;
  preview?: string;
  label?: string;
  kicker?: string;
  headline?: React.ReactNode;
  lead?: React.ReactNode;
  /** The dates that matter after cancelling. */
  dates?: DataRow[];
  body?: React.ReactNode;
  cta?: { label: string; href: string };
  note?: React.ReactNode;
}

/**
 * Cancellation — confirms without arguing, gives the dates, and puts the data
 * export first. The offer to resume is one line, at the end, where it belongs.
 */
export function CancellationEmail({
  brand,
  subject = 'Your Sonar subscription is canceled',
  preview = 'Confirmed — access runs through Aug 31 and your export is ready.',
  label = 'Account',
  kicker = 'Cancellation confirmed',
  headline = (
    <>
      THAT’S
      <br />
      DONE.
    </>
  ),
  lead = 'Northwind’s Pro subscription is canceled. No further charges. Nothing else to do.',
  dates = [
    { label: 'Access continues through', value: 'Aug 31, 2026' },
    { label: 'Final invoice', value: '$0.00' },
    { label: 'Data retained until', value: 'Sep 30, 2026' },
  ],
  body = 'Grab your data before September 30 — full event history as CSV or Parquet, no gating.',
  cta = { label: 'Export my data', href: 'https://sonar.example.com/export' },
  note = (
    <>
      {'Changed your mind before Aug 31? '}
      <InlineLink href="https://sonar.example.com/billing/resume">
        Resume instantly
      </InlineLink>
      {' and nothing is lost. If you have 30 seconds, '}
      <InlineLink href="https://sonar.example.com/why">
        tell us why you left
      </InlineLink>
      {'.'}
    </>
  ),
}: CancellationEmailProps = {}) {
  return (
    <EmailLayout
      brand={brand}
      subject={subject}
      preview={preview}
      label={label}
      accent="muted"
    >
      <Band tone="muted" padding="48px 32px 42px 32px">
        <Kicker color={colors.ink}>{kicker}</Kicker>
        <Display size={56}>{headline}</Display>
        <Lead>{lead}</Lead>
      </Band>

      <Band padding="36px 32px">
        <DataTable rows={dates} />
        <BodyText>{body}</BodyText>
        <CTAButton href={cta.href} background="ink" color="mint">
          {cta.label}
        </CTAButton>
        <Note>{note}</Note>
      </Band>
    </EmailLayout>
  );
}

export default CancellationEmail;

Related templates

More from 14 SaaS Product Emails — Sonar.

View the complete bundle