Steven's Knowledge

Email & Communication

Transactional email, SMS, push - Resend, SendGrid, SES, Postmark, Twilio. The "we forgot we need to send messages" infrastructure.

Email & Communication

Every product eventually needs to send messages: confirmations, password resets, alerts, marketing, notifications. Building this yourself means dealing with SMTP, deliverability, bounce handling, DKIM, rate limits, and abuse complaints — a multi-year tax.

The right call: use a transactional email provider plus, for non-email channels, dedicated services. This page covers the landscape.

What Communication You Need

ChannelWhat forProvider category
Transactional emailVerify email, reset password, receipts, alertsResend, Postmark, SendGrid, SES
Marketing emailNewsletters, campaigns, drip sequencesMailchimp, Customer.io, Loops
SMSOTP, urgent alerts, marketingTwilio, MessageBird, AWS SNS
Push notificationsMobile / web app messagesFirebase Cloud Messaging, OneSignal, APNs/FCM directly
In-app messagingNotifications inside your productKnock, Courier, build it yourself
Voice / WhatsAppCalls, business messagingTwilio, MessageBird

Most products start with transactional email. Then SMS for verification. Then push for mobile. Marketing email is usually a separate decision (and often a separate tool with separate suppression lists).

Transactional Email Providers

ProviderNotes
ResendModern; developer-first; React Email integration; growing fast
PostmarkExcellent deliverability; pricier; reputation-focused
SendGrid (Twilio)Industry standard; full-featured; complex pricing
MailgunMature; flexible; competitive pricing
Amazon SESCheapest at scale; pure delivery; you build the rest
MailtrapDev-first; sandbox + transactional + testing
LoopsModern; combines transactional + product marketing
Brevo (Sendinblue)Transactional + marketing; European

Starting points in 2026:

  • New project, want it to workResend or Postmark.
  • Already on AWS, technical teamSES + a wrapper library.
  • Need both transactional and marketing in one placeLoops or Customer.io.
  • High scale, technicalSES ($0.10/1000 emails), build deliverability ops yourself.

Why Not Just SMTP from Your App

Your app can send via SMTP. Don't. Reasons:

ProblemWhy it matters
Cloud provider blocks port 25AWS, GCP, Azure all block outbound SMTP by default to prevent abuse
ReputationYour IP needs warm-up history; email providers won't trust a new IP
DKIM / SPF / DMARCRequired for deliverability; a transactional service handles this
Bounce / complaint handlingHard / soft bounces have specific protocols
Suppression listsDon't email people who unsubscribed (legal + reputation)
Inbox placementGmail / Outlook have ML-based spam scoring; expertise required

A provider abstracts all of this. Even if "I just need to send 10 emails/day," use a provider.

Email Anatomy: What You Configure

For your domain:

RecordPurpose
MXWhere to deliver email for your domain (if you receive email)
SPF (TXT)Which servers are authorized to send as your domain
DKIM (TXT)Public key for verifying signed messages
DMARC (TXT)Policy for when SPF / DKIM fail; reports
BIMI (TXT)Brand logo in inbox (Gmail / Yahoo show it)
MTA-STS / TLS-RPTEnforce TLS for inbound; get TLS reports

See DNS for the format. Your transactional provider gives you the values; you add them to your DNS.

Learning Path

Decoupling: Send via a Queue

Don't send synchronously from a user request. A common architecture:

User signs up
  └─► API enqueues "send-welcome-email" job (see Background Jobs)
       └─► Worker calls Resend / SendGrid API
            └─► Email delivered (or fails; worker retries)

Benefits:

  • User request returns fast.
  • Email outage doesn't block signups.
  • Retries are automatic.
  • Easy to observe (per-job metrics).

See Background Jobs for the queue layer.

Marketing email is a separate problem with separate tools. Transactional providers can technically send marketing emails too, but the abuse risk to your sender reputation is real — one bad campaign and your transactional deliverability suffers. Most teams use separate tools and separate sending domains for the two purposes.

On this page