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

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. Customize the copy and styles in the playground above.
- 2. Export or copy the typed TSX source.
- 3. Pass dynamic props and send it from a server route with your email provider.
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.


