AWS SES vs Mailgun for Cold Email
Cost and policy comparison for teams deciding between raw sending infrastructure and a managed transactional email API.
What AWS SES Is Built For
Amazon SES is a raw email sending API. It accepts messages and delivers them. There is no campaign builder, no analytics dashboard, no template editor, and no warmup scheduler. You bring the message; SES handles delivery. Sequences, follow-ups, and reply detection all require a separate tool on top.
SES is built for developers and teams who need reliable delivery at scale without per-account or monthly plan costs. Your reputation lives in your AWS account, isolated from other SES customers by default. One account scales from hundreds to millions of emails per month without changing providers or restructuring how you pay.
What Mailgun Is Built For
Mailgun is a transactional email API built for developers sending programmatic email at scale. It was built for application-triggered messages: password resets, account notifications, order confirmations, and similar system-generated sends. The product adds delivery analytics, template management, email validation, and inbox placement testing on higher tiers.
Like SES, Mailgun is infrastructure, not a cold email tool. What it adds over SES is a more polished developer experience, granular delivery analytics, and managed shared IP reputation for lower-volume senders. The tradeoff is significantly higher per-email cost and an acceptable use policy that explicitly prohibits cold email regardless of plan tier or IP type.
Pricing: Real Numbers
AWS SES charges $0.10 per 1,000 emails. No monthly minimums, no plan tiers for sending volume. At 50,000 emails per month the cost is $5. At 100,000 it is $10. At 500,000 it is $50.
Mailgun uses monthly plan tiers. The Foundation plan at $35 per month covers 50,000 emails on shared IPs. The Scale plan at $90 per month covers 100,000 emails and includes one dedicated IP. Neither plan has a 500,000-email tier. Sending 500,000 per month on Scale means paying the $90 base plus 400,000 overage emails at $1.10 per 1,000 — approximately $530 per month. Mailgun recommends contacting sales for Enterprise pricing at that volume, which may be lower than overage billing.
The cost gap is consistent at every level. At 50,000 emails per month, SES costs $5 versus Mailgun's $35 — a 7x difference. At 100,000 emails, SES costs $10 versus $90 — a 9x difference. At 500,000 emails, SES costs $50 versus approximately $530 — roughly a 10x difference. For high-volume senders, the annual savings of choosing SES over Mailgun at 500k emails per month exceeds $5,700.
Cold Email Policy
AWS SES permits cold email with compliance requirements. You must follow CAN-SPAM regulations, include unsubscribe mechanisms, and keep bounce rates below 5 percent and complaint rates below 0.1 percent. Within those limits, sending to business contacts who have not previously opted in is allowed.
Mailgun explicitly prohibits cold email. Their acceptable use policy requires express opt-in consent for all non-transactional email, collected through a confirmed single or double opt-in system. Purchasing, renting, or scraping contact lists is prohibited. There is no B2B carve-out — the same opt-in requirement applies regardless of whether recipients are consumers or business professionals.
Mailgun enforces this. They monitor bounce rates (5% threshold), spam complaints (0.08% threshold), and block rates (20% threshold). Cold email consistently exceeds all three. Accounts sending cold email are suspended. Building a cold email operation on Mailgun means building on infrastructure designed to remove that use case.
Infrastructure and IP Control
AWS SES ties your sending reputation to your AWS account by default. No other SES customer shares your IP unless you explicitly opt into shared infrastructure. You control your domain authentication — SPF, DKIM, and DMARC — under your own domain. Every deliverability signal inbox providers track comes from your account history, not from a pool of other senders.
Mailgun's Foundation plan uses shared IPs. Your reputation on those IPs depends partly on what every other Foundation-tier sender is doing. The Scale plan includes one dedicated IP, which isolates you from other senders. Additional dedicated IPs cost $59 per month each. For cold email specifically, the IP isolation question is irrelevant — Mailgun prohibits cold email on every plan regardless of IP type.
Setup Complexity
AWS SES requires more upfront configuration. You need an AWS account, IAM credentials scoped for SES, DNS records for domain verification, DKIM setup, and a production access request before you can send to external addresses. SES starts in sandbox mode — you can only send to verified addresses until AWS approves production access, which typically takes 24 to 48 hours.
Mailgun setup is more straightforward. You create an account, verify your domain through DNS, generate an API key, and you can send. Most developers complete setup in under an hour. The API documentation is thorough and the onboarding flow handles the main configuration steps.
Feature Comparison
| Factor | AWS SES | Mailgun |
|---|---|---|
| Pricing model | $0.10 per 1,000 emails, no minimum | Monthly plan tiers with overage rates |
| Cost at 50k/month | $5/mo | $35/mo (Foundation, shared IPs) |
| Cost at 100k/month | $10/mo | $90/mo (Scale, 1 dedicated IP) |
| Cost at 500k/month | $50/mo | ~$530/mo (Scale + overage) |
| Cold email policy | Allowed with CAN-SPAM compliance | Prohibited — opt-in required |
| IP type | Dedicated to your AWS account | Shared (Foundation) or dedicated (Scale, $90+/mo) |
| Setup complexity | High — IAM, DNS, DKIM, sandbox exit | Moderate — DNS verification, API key |
Which One Fits Your Situation
Use AWS SES if cold email outreach is your use case. It is the only option of the two that permits it. SES also wins on cost at every volume level, gives you full reputation isolation, and scales without changing infrastructure. The setup overhead is real but one-time. If someone on your team is comfortable with AWS IAM and DNS, SES is the right infrastructure for outreach.
Use Mailgun if your sending is transactional — application notifications, password resets, shipping confirmations, or account alerts. Mailgun's managed delivery, granular analytics, and email validation tools have genuine value for application email. The Foundation plan at $35 per month for 50,000 transactional sends is straightforward, and the API is well-documented. For development teams already in the Sinch ecosystem or needing detailed bounce classification, Mailgun is a solid choice for the use case it is built for.
Do not use Mailgun for cold email regardless of plan tier. The policy is actively enforced, the complaint thresholds that trigger suspension are consistently exceeded by cold outreach, and there is no dedicated IP workaround that changes the acceptable use terms. You will lose the account and need to rebuild on different infrastructure.
How EmailQo Works with SES
EmailQo connects directly to your Amazon SES account as the sending layer. You provide SMTP credentials from your AWS account, and EmailQo handles sequences, follow-ups, sender rotation, reply detection, and unsubscribe processing on top. AWS bills you directly at $0.10 per 1,000 emails with no markup from EmailQo. Every EmailQo plan includes built-in warmup for SES-connected accounts and pre-send inbox health checks that validate DNS authentication, scan content for spam triggers, and check blacklist status before each campaign goes out.
Related Resources
Keep reading