Your AI app works, a user signs up, and the verification email never arrives. Or it lands in spam. Picking a transactional email service is a small decision that causes a large share of launch-week support tickets. This post compares Resend, Brevo and Amazon SES on what a small AI app needs: free tier, price at your volume, setup effort, and the DNS records that decide whether mail reaches the inbox.
Short version: Resend is the fastest to get working, SES is the cheapest at scale and the most work, and Brevo is the one to consider if you also want marketing email in the same tool. All figures below were read on 2026-10-09 and will drift, so check the linked pages before you commit.
What does your AI app actually send?
Transactional means one-to-one mail triggered by a user action. For a typical AI app that's a short list:
- Email verification and magic links
- Password resets
- Receipts and payment failures
- Usage alerts ("you've used 80% of your credits")
- Job-finished notices for long-running tasks
A few thousand a month is normal at launch. That is why the free tiers matter more than the per-thousand price. If you're also deciding on rate limits for your free users, rate limiting a free tier AI app matters here too: every free signup you allow can trigger an email you pay for.
How do the free tiers and prices compare?
I read each provider's own page on 2026-10-09. Brevo needs a caveat, noted below the table.
| Resend | Brevo | Amazon SES | |
|---|---|---|---|
| Free tier | 3,000 emails/month, 100/day cap, 3 domains | SMTP relay on the free plan with a daily cap (see caveat) | Up to $200 in AWS credits for new customers, free plan lasts 6 months |
| Next step up | Pro $20/month for 50,000; $35 for 100,000 | Paid transactional plans (see caveat) | Pay as you go, $0.10 per 1,000 outbound |
| Overage | $0.90 per 1,000 on Pro (only if enabled; none on Free) | Check Brevo | Same $0.10 per 1,000 |
| Dedicated IP | Add-on $30/month, on Scale plans | Check Brevo | $24.95/month per IP (standard) |
| Attachments | Not read | Not read | $0.12 per GB sent |
| Setup effort | Low | Low to medium | Highest (sandbox exit, IAM, bounce handling) |
Sources: Resend pricing, Amazon SES pricing, both fetched 2026-10-09 through a summarising tool, so check exact wording yourself.
Brevo caveat, read this. Brevo's pricing page and its help centre returned no usable content (one blocked with 403, the other came back as only a page title) when I tried on 2026-10-09. What I have is from a web-search summary: Brevo describes SMTP relay on its free plan with a sending limit of 300 emails per day, and its SMTP page lists paid transactional plans starting at $15 for 20,000 emails a month. Review sites disagree on other details. Treat both numbers as unverified and read Brevo's pricing page in a browser before deciding.
The SES page I read describes new customers getting up to $200 in AWS credits, with the free plan lasting 6 months after account creation and credits to be used within 12 months. If an older guide promises a monthly free email allowance, check it against the page.
What does it cost at your volume?
I wrote a ten-line script that applies the prices above, so you can swap in your own numbers. It uses Resend's Pro plans plus overage and SES's $0.10 per 1,000. Brevo is left out because I couldn't verify its pricing.
import math
def resend(n):
if n <= 3000:
return 0.0, "Free"
options = []
for price, included in ((20, 50_000), (35, 100_000)):
extra = max(0, n - included)
cost = price + math.ceil(extra / 1000) * 0.90
options.append((cost, f"Pro ${price}"))
return min(options)
def ses(n):
return n / 1000 * 0.10
Output from running the full script on 2026-10-09:
emails/mo Resend plan SES
1,000 0.00 Free 0.10
3,000 0.00 Free 0.30
10,000 20.00 Pro $20 1.00
50,000 20.00 Pro $20 5.00
100,000 35.00 Pro $35 10.00
250,000 170.00 Pro $35 25.00
1,000,000 845.00 Pro $35 100.00
Read it carefully. The 250,000 and 1,000,000 Resend rows are Pro plus overage, which is not what you'd actually buy. Resend's Scale plans exist for that range: the page lists $160 for 200,000 and $650 for 1,000,000 a month. Even so, SES is several times cheaper per email at volume. The SES row also excludes attachments, dedicated IPs and your own engineering time.
The honest decision rule: below about 50,000 emails a month the dollar gap is under $20, so choose on setup time. Above that, SES starts to save real money and the setup cost is paid once.
How do you set up SPF, DKIM and DMARC?
All three providers make you verify a domain. These are the three DNS records behind that.
- SPF lists the servers allowed to send for your domain. It's a TXT record starting
v=spf1. - DKIM adds a cryptographic signature to each message, verified against a public key in DNS. SES's Easy DKIM adds a 2048-bit key by default, per the AWS docs.
- DMARC tells receivers what to do when SPF and DKIM fail to align with your From domain, and where to send reports.
Google's sender guidelines (read 2026-10-09) say all senders need SPF or DKIM, and anyone sending more than 5,000 messages a day to Gmail accounts must also pass DMARC. DKIM keys should be at least 1024 bits, 2048 recommended. Keep the spam rate in Postmaster Tools under 0.30%, and Google advises staying under 0.10%. Mail should travel over TLS, and sending IPs need valid forward and reverse DNS. Yahoo's sender best practices say the same minimum for all senders, and ask bulk senders for a DMARC policy of at least p=none, with a rua tag strongly recommended. Yahoo's page gives no numeric bulk threshold.
You're probably under 5,000 a day. Do all three anyway.
A DMARC starter record
Resend's DMARC guide recommends starting at monitor mode and tightening later:
_dmarc.example.com TXT "v=DMARC1; p=none; rua=mailto:dmarcreports@example.com;"
Then move p=none to p=quarantine, then p=reject, only after every legitimate source of your mail passes. The rua address receives XML aggregate reports showing who is sending as your domain.
Lint your records before publishing
DNS typos are the commonest failure. This small script checks strings only (no DNS lookups). I ran it on 2026-10-09:
v=spf1 include:amazonses.com include:_spf.google.com ~all
direct DNS-lookup terms: 2 (limit is 10 including nested includes)
v=spf1 include:a.example include:b.example +all
direct DNS-lookup terms: 2 (limit is 10 including nested includes)
FAIL: +all allows anyone
v=DMARC1; p=none; rua=mailto:dmarc@example.com;
OK for monitoring; tighten after reports look clean
v=DMARC1; p=maybe
FAIL: p must be none, quarantine or reject
WARN: no rua, you will get no aggregate reports
The 10-lookup limit comes from the SPF specification (RFC 7208). The script only counts direct terms, so nested includes from providers can push you over. Use a real SPF checker after publishing, and keep one SPF record per domain: if you use two providers, merge their include: entries into one record.
Provider-specific gotchas
Resend. The test addresses are the best feature for development: delivered@resend.dev, bounced@resend.dev, complained@resend.dev and suppressed@resend.dev simulate each outcome. Test emails still count against your quota. Its docs recommend sending from a subdomain such as updates.example.com. The 100 a day cap on Free is the thing to watch: a launch day signup spike can hit it, and Free has no overage option.
Amazon SES. New accounts start in the sandbox. Per the AWS docs: you can only send to verified addresses, 200 messages per 24 hours, 1 message per second, and sandbox status is per region. Verify your domain first, because AWS says that helps approval, then request production access and describe your use as transactional. AWS states an initial response within 24 hours. The form's acknowledgement says you only email people who asked for it and have a process for bounces and complaints. Build that process before you ask: SES expects you to handle bounce and complaint notifications yourself.
Brevo. Unverified here beyond the search summary. Check whether the free plan adds a Brevo logo or footer to what you send, and whether the daily cap resets on a rolling or calendar basis.
Which one should you pick?
Use this as a decision table, not a ranking:
| Your situation | Pick | Why |
|---|---|---|
| Launching this week, under 3,000 emails a month | Resend Free | Fewest steps to working email; watch the 100/day cap |
| Already on AWS, expect 100,000+ a month | SES | Lowest per-email cost, IAM fits your stack |
| You also want newsletters or campaigns | Brevo (after verifying limits) | One tool for both, if its pricing fits |
| Strict budget, comfortable with ops | SES | Pay-as-you-go with no minimum fee |
| Need a dedicated IP | Compare: Resend $30/month add-on, SES $24.95/month per IP | Both cost money; most small apps don't need one |
If your app runs on your own server, the outbound mail question is separate from hardening that server. Don't run your own mail server for transactional mail. Providers handle IP reputation for you.
Pre-launch email checklist
- Domain verified at your provider; SPF and DKIM show as passing.
- DMARC record published with
p=noneand aruaaddress. - Sending from a subdomain, not your root domain.
- Real test: send to Gmail and one other provider, open "show original" and confirm SPF, DKIM and DMARC say pass.
- Bounces and complaints are handled: stop sending to addresses that hard bounce.
- The free-tier daily cap is higher than your worst launch-day signup spike. If not, upgrade first.
- Signup emails are rate limited per IP and per address, so one script can't burn your quota.
To check that email costs don't eat your margin, see the gross margin calculator per user.
Email is one step in a longer sequence. For domain, hosting, TLS, spend caps and analytics in the right order, see the launch checklist for an AI side project.
Prices and limits change. Re-check each provider's page the day you sign up.



