All specs
infrastructuremedium complexity

Transactional Email

Used in 6 specs

Send reliable, deliverable emails triggered by product events — verification, password reset, receipts, invitations, and system alerts.

Options

Delivery Provider*

Third-party email API with APIs, templates, and deliverability monitoring.
Cheapest at volume; minimal tooling built in.
Your own MTA (Postfix, Haraka) on your own IPs.

Deliverability Setup*

Authenticate your sending domain; publish a DMARC policy; monitor reports.
Consume bounce and spam-complaint webhooks; suppress invalid or unsubscribed addresses.
Different sending domains / IPs for product email vs marketing campaigns.
Your own sending IP instead of a shared pool.

Templating Approach*

Email templates live in your repo, reviewed and tested like any other code.
Templates managed in the provider dashboard; non-engineers can edit.
Single service manages email, in-app, SMS, and push with per-user preferences.

Decision Points

Will you ever send marketing email (newsletters, promotions) from the same brand?

If yes

Plan separate transactional and marketing streams from the start.

If no

A single stream is simpler; split later if you add marketing email.

Do you expect to send >100k emails/month in year one?

If yes

Evaluate SES or Postmark pricing carefully; negotiate volume discounts.

If no

Pick the best developer experience (Resend / Postmark) — the price delta is rounding at low volume.

Should you use a managed provider (SendGrid, Postmark, SES) or self-host?

If yes

Use a managed provider — Postmark for deliverability, Resend for DX, SES for cost at volume. Self-hosting is never worth it for transactional.

If no

Only self-host for regulated environments with egress constraints; expect months of reputation work.

Is a dedicated IP justified for your volume?

If yes

Above ~100k emails/month, request a dedicated IP and budget a 2–4 week warm-up. Below that, shared pools from Postmark/SendGrid are cleaner.

If no

Stay on the shared pool — reputation is managed for you.

Should mail send from an isolated subdomain (mail.yourdomain.com)?

If yes

Standard practice — protects root-domain reputation from email mistakes and makes DNS records easier to manage.

If no

Only sending from root if you have no other choice; keep SPF/DKIM alignment tight.

Is DMARC enforcement (p=reject or p=quarantine) required?

If yes

Start with p=none for reporting, then ramp to quarantine and reject once SPF+DKIM alignment is verified across all senders.

If no

Inbox providers increasingly require DMARC — plan to enforce within 6 months anyway.

Do user replies to transactional email need to drive app actions (reply-to-comment)?

If yes

Use a provider with inbound reply parsing (Postmark, SendGrid Inbound Parse) and a dedicated Reply-To subdomain with MX records.

If no

Set Reply-To to a monitored support inbox or no-reply address.

Does marketing/CX need to edit templates without a code deploy?

If yes

Use provider-hosted templates (SendGrid Dynamic Templates, Postmark) or a notification platform (Knock, Courier). Keep security emails in code.

If no

Code-owned templates (React Email, MJML) are reviewable and version-controlled.

Do templates need per-recipient personalization beyond name / link?

If yes

Use a templating engine with merge fields (Handlebars, Liquid). Provider templates handle this well; React Email makes it trivial in code.

If no

Static templates with a few variables are fine — don't over-engineer.

Do you need template versioning with rollback?

If yes

Code templates get this from git for free. For provider templates, pick one with built-in versioning (Postmark) or snapshot before edits.

If no

Direct edits are fine for low-stakes messages.

Do you need to send localized email content per recipient?

If yes

Either one template per locale (simple, duplicated) or a single template with i18n key lookups. Store recipient locale on the user record.

If no

English-only ships faster; add locales when revenue justifies it.

Do you need open and click tracking for product email?

If yes

All major providers offer it as a toggle. Useful for onboarding email analytics — but disclose tracking in your privacy policy.

If no

Disable trackers on security-sensitive email (password resets) regardless — tracking pixels in those emails look phishy.

Are bounce and complaint webhooks processed to suppress bad addresses?

If yes

Non-negotiable at any real volume. Subscribe to provider webhooks and maintain a suppression table checked before every send.

If no

You will tank your sender reputation within weeks — this is not optional.

Do you need to schedule sends for a future time?

If yes

Most managed providers support scheduled sends natively; otherwise enqueue to a delayed job queue (BullMQ, SQS with delay).

If no

Send immediately from the triggering event — simpler.

Do you send high-fan-out batches (announcement to all users at once)?

If yes

Use the provider's batch send API (SendGrid v3, Postmark batch). Chunk to stay under per-call limits and spread over minutes to avoid throttling.

If no

One-at-a-time calls via your background queue are simpler.

Can end-users (white-label customers) customize email content?

If yes

Sandbox the template language (no arbitrary code), validate on save, and preview before activating. Use a notification platform if this is core.

If no

Keep templates locked down — far fewer support tickets.

Do you need an internal preview / test-send surface for QA?

If yes

Build an admin route that lists all templates with sample data. Pair with Mailpit/Mailhog in dev to catch rendering bugs before prod.

If no

You'll hear about broken templates from customers — not recommended.

Do you need a single unsubscribe list shared across product surfaces?

If yes

Centralize in your user record or a notification platform — users unsubscribing from any email should stop all non-critical mail.

If no

Per-stream unsubscribes create support tickets; avoid if at all possible.

Tradeoffs

CostManaged provider chosen

Vendor cost scales with volume; deliverability expertise comes included

ComplexitySES chosen

Low per-email cost but you own deliverability operations (reputation, bounces, suppression)

ComplexitySeparate streams for marketing vs transactional

Two sending configurations and domains to maintain — worth it for deliverability isolation

Go Deeper

Implementation Examples

Resend

Developer-first transactional email with React Email integration.

Postmark

Best-in-class deliverability for transactional mail; strict separation from bulk traffic.

React Email

Component library for building email templates that render across mail clients.

Used by specs

E-commerce StorefrontSaaS StarterAI-Powered SaaSCRM PlatformMarketplace PlatformDeveloper Tool / API Product