You don't need SendGrid to send password resets and magic links. AWS SES costs $0.10 per 1,000 emails. Self-hosted tools like Postal handle it for free. And deployment platforms like Temps bundle SMTP, SES, and Scaleway email directly — no third-party relay, no separate API key, no additional infrastructure.
TL;DR: Most apps only need transactional email for auth flows — password resets, magic links, verification. SendGrid starts at $15+/month for features most projects never use. AWS SES costs $0.10/1,000 emails but requires sandbox escape, SNS bounce handling, and IAM setup. Temps includes SMTP, SES, and Scaleway providers built in — configure once during temps setup and your apps send email with no external relay.
Transactional email — password resets, magic links, OTP codes, order receipts — differs from marketing email in three ways that matter for infrastructure:
Triggered by user action, not scheduled campaigns. Latency matters. A password reset that takes 2 minutes to arrive feels broken.
Legally exempt from unsubscribe requirements. CAN-SPAM and GDPR treat transactional email as necessary for contract performance — no consent banner, no unsubscribe link required.
Low volume, high importance. A typical SaaS with 500 daily active users sends 200-500 transactional emails per day. Deliverability matters more than bulk throughput.
The six components you actually need:
SMTP server — accepts outbound mail from your app
SPF, DKIM, DMARC — DNS records that determine inbox placement
Bounce handling — suppress future sends to invalid addresses
Rate limiting — warm new IPs gradually (50-200 emails/hour at start)
Retry queue — exponential backoff on temporary delivery failures
Template engine — inject dynamic content into HTML emails
These three DNS records are non-negotiable. Google's sender requirements mandate SPF and DKIM for all senders. Skip any one and your email rates spike in spam folders.
Adds a cryptographic signature to every outgoing message. The receiving server looks up your public key in DNS and verifies the message wasn't tampered with:
Start with p=none for the first two weeks to monitor without blocking. Move to p=quarantine once you've confirmed all legitimate senders pass SPF and DKIM.
Bounce classification (hard vs. soft) and suppression lists
IP warmup management
Blocklist monitoring (MXToolbox, Spamhaus)
Log rotation for mail logs
Running Postfix on a VPS works well under 1,000 emails/day. Beyond that, IP reputation becomes the bottleneck. ISPs throttle new IPs heavily — warmup takes 2-4 weeks of gradually increasing volume.
SES costs $0.10 per 1,000 emails — the cheapest managed option. But the setup process is multi-step:
Request production access — SES starts in sandbox mode. Submit a use-case request; AWS reviews manually (1-3 business days).
Verify your domain — Add a CNAME to DNS. SES enables domain-level sending.
Configure DKIM — SES provides three CNAME records. Add all three.
Set up bounce handling — Create an SNS topic for bounces and complaints, subscribe a Lambda function or SQS queue to process them. Ignore bounces and AWS suspends your account.
Create IAM credentials — Generate SMTP credentials from the SES console.
Set up a configuration set — Track delivery metrics via CloudWatch.
The cost math for a typical SaaS:
Email type
Daily volume
Monthly cost
Password resets
~20
$0.06
Verification emails
~50
$0.15
Magic links
~100
$0.30
Activity notifications
~200
$0.60
Total
~370
~$1.11
SES is the right call if you're already running Lambda functions and CloudWatch dashboards — the incremental cost is negligible. If you're not in the AWS ecosystem, the onboarding overhead (SNS, IAM, CloudWatch) exceeds what most small projects justify.
Postal is a full-featured, open-source mail delivery platform written in Ruby — the closest self-hosted equivalent to SendGrid.
What you get: SMTP server with web UI, DKIM signing, webhook notifications for delivery events, click and open tracking, IP pool management, HTTP API and SMTP interface.
Listmonk is primarily a newsletter manager but handles transactional email through its API. Written in Go — fast and resource-efficient (~100MB RAM, PostgreSQL, single binary).
Good choice if you need both transactional and marketing email in one tool. For transactional-only, it's more than you need.
Full mail server suite — SMTP, IMAP, webmail, antispam — packaged in Docker containers. Overkill for transactional-only, but the right choice if you also want to receive email on your domain.
Temps includes SMTP, SES, and Scaleway email providers built in — no third-party relay required. The email system is part of the same single Rust binary that handles deployments, analytics, error tracking, and uptime monitoring. There is no separate service to configure or pay for.
Your deployed applications send email through the built-in endpoint with no additional configuration. Auth flows — password resets, magic links, OTP codes, email verification — work immediately.
A standard self-hosted email stack requires: SMTP server + queue processor + bounce handler + monitoring dashboard. With Postal, add MySQL and RabbitMQ. With SES, add Lambda and SNS.
Temps collapses this into the same binary already running your deployments. No extra containers, no extra services, no extra monthly bills.
Not if you configure DNS correctly. SPF, DKIM, and DMARC are the three records that determine inbox placement. Google's sender guidelines require all three for reliable delivery. Start with a 2-4 week warmup — send to small batches first and increase volume gradually. Monitor sender reputation through Google Postmaster Tools (free).
Most cloud providers allow outbound SMTP on ports 587 and 465 but block port 25 by default. Hetzner requires a manual unblock request. A single VPS with a warmed IP reliably handles 1,000-2,000 emails per day. Beyond that, you need dedicated IPs and professional-grade reputation management. Rate-limit yourself to 100-200 emails per hour when starting.
For deliverability, yes — AWS has established IP reputation across massive pools. For simplicity, no — SES requires sandbox escape, SNS bounce handling, IAM credentials, and CloudWatch monitoring. If you're already deep in the AWS ecosystem, SES costs $0.10/1,000 emails and is a reasonable choice. If you're not, the setup overhead typically exceeds what small projects justify.
Brevo (formerly Sendinblue) offers 300 free emails per day. These work for prototyping. The tradeoff: shared IP reputation, strict rate limits, and limited customization. For production apps, shared infrastructure creates deliverability risk. Dedicated sending — your own SMTP or a platform with native providers — gives you control over your sender reputation.
Transactional email is a solved problem sold as a monthly subscription. You don't need $15/month to send 200 password resets a day. You need an SMTP server, three DNS records, and a retry queue.
The right option depends on your stack:
Already on AWS: SES at $0.10/1,000 emails is a natural fit
Want full control, some ops overhead: Postal or Mailu self-hosted
Want to eliminate the category entirely: Temps bundles SMTP, SES, and Scaleway providers with your deployment platform