# Mailgun vs Wraps - Compare Email Infrastructure Approaches

Source: https://wraps.dev/compare/mailgun-vs-wraps

![Wraps Logo](https://wraps.dev/wraps-light-logo.png)![Wraps Logo](https://wraps.dev/wraps-dark-logo.png)

](https://wraps.dev/)

[](https://github.com/wraps-team/wraps)[Log in](https://app.wraps.dev/auth?mode=signin)[Sign up](https://app.wraps.dev/auth?mode=signup)

Toggle menu

Comparison

**Mailgun** has been sending email since 2010. API-first, SDKs in six languages, route matching and inbound parsing that is still among the best in the category, email validation, deliverability tooling, and a US or EU region you pick at signup. You hand it a message and its servers do the rest.

**Wraps** sets up Amazon SES in your own AWS account. One command deploys the whole surface — domain identity, DKIM, event capture, suppression, delivery history — alongside whatever SES you already run. Then the control plane runs it: your bounce and complaint rates swept hourly against AWS's own lines, a suppression list you can browse and clear, deliverability and blacklist audits, an event log per message.

Most teams reach for a sending API because they don't want to deal with SES. That is the part Wraps does for you.

## TL;DR

|  | Mailgun | Wraps |
| --- | --- | --- |
| Infrastructure | Mailgun's servers | Your AWS account |
| Setup | Sign up, verify a domain, take an API key | One command deploys the whole SES surface |
| Day to day | Mailgun runs its own platform | Hourly account health sweep, suppression, deliverability audits |
| Sending cost | $15/mo (10K) to $90/mo (100K) | Paid to AWS: $0.10/1K à la carte, $0.16/1K on Essentials |
| Delivery history | 30 days (Foundation), 60 days (Scale) | Per-event history in your DynamoDB, retention you set |
| If you cancel | Data deleted, sending stops | Infrastructure keeps running |
| Data residency | US or EU region | Any AWS SES region |

## Everything Amazon SES needs, including operations

A sending API is a product you rent. SES is a primitive you own, and owning it is normally two jobs: standing it up, and running it afterwards. Wraps does both.

We set it up

`wraps email init` deploys the SES surface into your AWS account: domain identity and DKIM records, EventBridge event capture, an SQS queue with a dead letter queue, a Lambda processor, and a DynamoDB table for delivery history.

-   Non-destructive. Everything is namespaced `wraps-email-*` and coexists with SES you already run
-   Account-level suppression switched on at deploy, defaulting to bounces and complaints
-   CloudWatch alarms deployed into your account on the Production and Enterprise presets, set below AWS's own lines and paged to an email address or a webhook. Starter preset deploys get none.
-   Sandbox detected at the end of the run, explained, with the production access request linked
-   Access is an assumed role with an external ID and one-hour sessions. No AWS keys stored anywhere

The control plane runs it

An hourly sweep reads your bounce and complaint rates against the lines AWS publishes, classifies the account, and notifies owners and admins. AWS can place an account under review above 5% bounces or 0.1% complaints, and can pause sending at 10% and 0.5%. You hear it from us first.

-   Dashboard card draws both rates against those lines, next to your 24-hour quota
-   Suppression is a list you browse and clear, not an opaque vendor policy
-   `wraps email check` audits DKIM, SPF, DMARC, MX, MX-TLS, BIMI, RDAP, and public blacklists
-   `wraps email doctor` names the remediation instead of describing the symptom

One limit, flat: Wraps cannot get you SES production access. The CLI finds the sandbox and links the request. AWS decides, on AWS's timeline. Mailgun hands you a sending account at signup, and for some teams that alone settles it.

## What runs where

Mailgun is a hosted relay: your messages route through their infrastructure. Wraps splits into a data plane in your AWS account and a control plane hosted by us.

Mailgun

Managed email API founded in 2010. Your messages go out through Mailgun's shared or dedicated IP pools, with routing, validation, and log search in the same console. One vendor, one bill, nothing to deploy.

-   Sending reputation lives in Mailgun's pools, not yours
-   Data residency is US or EU
-   Delivery history ends when the plan's retention window does
-   No visual template editor or workflow builder

Wraps

SES, EventBridge, SQS, Lambda, and DynamoDB run in your AWS account, in the region you pick. That is the data plane: sending, and a per-event delivery history you keep. The control plane is hosted by us and holds the dashboard, templates, contacts, broadcasts, and workflow state, plus a row per message carrying recipient, subject, sender, template variables, and delivery timestamps.

-   One command deploys the whole surface, non-destructively
-   Account health swept hourly, owners and admins notified
-   Data residency in any AWS SES region
-   Infrastructure keeps running if you stop using Wraps

## Pricing at real volumes

Mailgun's paid plans run Basic at $15 for 10K, Foundation at $35 for 50K and $75 for 100K, and Scale from $90 at 100K to $400 at 500K. Wraps charges a flat platform fee and you pay AWS for sending: $0.10 per 1,000 à la carte, or $0.16 per 1,000 on the Essentials plan new AWS accounts default to.

| Volume | Mailgun | Wraps (platform + AWS) |  |
| --- | --- | --- | --- |
| 10K/mo | 
$15/mo

Basic

 | 

$1/mo

Free ($0) + $1 SES

 | 93% less |
| 50K/mo | 

$35/mo

Foundation

 | 

$34/mo

Pro ($29) + $5 SES

 |  |
| 100K/mo | 

$75-90/mo

Foundation 100K / Scale

 | 

$39/mo

Pro ($29) + $10 SES

 | 48-57% less |
| 500K/mo | 

$400/mo

Scale 500K

 | 

$79/mo

Pro ($29) + $50 SES

 | 80% less |

Wraps platform tiers: Free ($0/mo), Pro ($29/mo), Business ($199/mo). They are priced on AWS accounts, dashboard history, and governance features, not send volume. Every tier includes unlimited sends, contacts, domains, templates, and team members.

Two things to check on the Mailgun side: Flex closed to new signups in December 2025 and the legacy rate doubled to $2 per 1,000, and a dedicated IP is included only from the $75/mo plans up, with extras at $59/IP/mo.

At 50K the two are level, which is worth saying plainly. The gap opens above that: at 100K, $39/mo against $75 to $90.

## Feature comparison

| Sending | Mailgun | Wraps |
| --- | --- | --- |
| REST API |  |  |
| SMTP relay |  |  |
| Batch sending |  |  |
| Scheduled sending |  |  |
| Attachments |  |  |
| Inbound email parsing | Mature, route-based | EventBridge routing |

| Operations | Mailgun | Wraps |
| --- | --- | --- |
| Setup | Verify a domain in the console | One command into your AWS account |
| Account health monitoring | Mailgun watches its own platform | Hourly sweep of bounce and complaint rates, owners notified |
| Suppression list |  | On at deploy, browse and clear |
| Early-warning alarms | Webhook events from their platform | CloudWatch alarms in your account at 2% bounces / 0.05% complaints (Production and Enterprise presets) |
| Deliverability tooling | Email validation and deliverability suite | DKIM, SPF, DMARC, MX, BIMI, blacklists, on demand |
| Per-message event log | Log search, retention by plan | Event log per message, history in your DynamoDB |
| Production access | Granted by Mailgun at signup | AWS decides; the CLI detects the sandbox and links the request |

| Tracking & Analytics | Mailgun | Wraps |
| --- | --- | --- |
| Open tracking |  |  |
| Click tracking |  |  |
| Bounce handling |  |  |
| Delivery events |  |  |
| Data retention | 30-60 days (plan-dependent) | Per-event history in your DynamoDB, retention set in your deploy config; dashboard history 30 days to 1 year by plan |
| Data export | Limited API access | Events in your DynamoDB, contacts exportable |

| Infrastructure | Mailgun | Wraps |
| --- | --- | --- |
| Infrastructure ownership | Mailgun | You |
| DKIM/SPF/DMARC |  |  |
| Dedicated IPs | Included from $75/mo plans; extras $59/IP/mo | Request via AWS |
| Sending regions | US and EU | All AWS SES regions |
| Data residency compliance | US or EU only |  |
| Self-hosted / BYOC |  |  |

| Developer Experience | Mailgun | Wraps |
| --- | --- | --- |
| TypeScript SDK |  |  |
| Multi-language SDKs | 6 languages | TypeScript and Python |
| CLI tooling |  |  |
| MCP server for coding agents |  |  |
| React Email support |  |  |
| Template editor | No visual editor | AI designer + code editor |
| Workflow / automation builder |  |  |
| Requires AWS account |  |  |

| Platform | Mailgun | Wraps |
| --- | --- | --- |
| Dashboard | Console with log search | Dashboard with account health |
| Webhooks |  | Unlimited |
| Contact management | Mailing lists only | Full contacts with unlimited storage |
| Open source |  | AGPL-3.0, self-hostable |
| Cancel impact | Data deleted | Infrastructure persists |

## When to choose Mailgun

Fifteen years of sending is a real asset. Here's when it wins outright.

-   You have no AWS account and no appetite for one. A hosted API is a different approach, and Mailgun is a good one
-   You need SDKs in Ruby, .NET, PHP, or Java today
-   Your app leans on Mailgun's route matching and inbound parsing pipeline
-   You use email validation and log search and want them on one bill
-   You want EU data residency without touching AWS yourself
-   You're tied into third-party tools that ship a Mailgun connector

## When to choose Wraps

Wraps is built for teams who want SES underneath them and don't want to run it alone.

-   You want SES and not the setup. One command deploys the whole surface into your own AWS account, non-destructively
-   You want someone watching the account. Bounce and complaint rates are swept hourly against AWS's own lines, and owners and admins hear about it first
-   You already have an AWS account, or your company does
-   You want delivery history you keep, in your own DynamoDB, for as long as your deploy config says
-   You're sending 100K+ emails a month and the difference shows up on the bill
-   You want templates, broadcasts, segments, and workflows, not only a send endpoint
-   You want the infrastructure to keep running whether or not you keep paying us

## Switching from Mailgun

Mailgun uses its own SDK with a domain-centric API. Wraps uses a similar send signature with native React Email support. The migration is an SDK swap, a DNS update, and one CLI command to deploy infrastructure.

Before (Mailgun)

send.ts

```
import FormData from "form-data";import Mailgun from "mailgun.js";const mailgun = new Mailgun(FormData);const mg = mailgun.client({  username: "api",  key: process.env.MAILGUN_API_KEY,});await mg.messages.create("mg.example.com", {  from: "hello@example.com",  to: ["user@example.com"],  subject: "Welcome",  html: "<h1>Welcome to the app</h1>",});
```

After (Wraps)

send.tsx

```
import { WrapsEmail } from "@wraps.dev/email";const email = new WrapsEmail();await email.send({  from: "hello@example.com",  to: "user@example.com",  subject: "Welcome",  react: <WelcomeEmail />,});
```

### Migration steps

1.  Install the CLI: `npm install -g @wraps.dev/cli`
2.  Deploy infrastructure: `wraps email init`
3.  Swap `mailgun.js` for `@wraps.dev/email`
4.  Update DNS so your SPF and DKIM records point at your new SES identity
5.  Move inbound routing over with `wraps email inbound init`
6.  Run `wraps email check` against the domain before you cut traffic over

HTML email templates work unchanged. If you use React Email, Wraps supports it natively, with no adapter. Your domain reputation travels with your DNS records; IP reputation stays with Mailgun if you were on their shared pool.

[

Not sure it comes down to these two?

We also rank 13 Mailgun alternatives, prices included, with Wraps placed where it honestly belongs.

](https://wraps.dev/alternatives/mailgun)

## Also Compare

[

Resend vs Wraps

Same DX, different economics

](https://wraps.dev/compare/resend-vs-wraps)[

Amazon SES vs Wraps

Same infrastructure, better DX

](https://wraps.dev/compare/amazon-ses-vs-wraps)[

SendGrid vs Wraps

Escape the legacy tax

](https://wraps.dev/compare/sendgrid-vs-wraps)[

Customer.io vs Wraps

Unlimited contacts, no surprise bills

](https://wraps.dev/compare/customer-io-vs-wraps)[

Postmark vs Wraps

Beyond transactional sending

](https://wraps.dev/compare/postmark-vs-wraps)[

Klaviyo vs Wraps

Up to 5.6x cheaper at scale

](https://wraps.dev/compare/klaviyo-vs-wraps)[

Hand-rolled bounce handling vs Wraps

152 honest lines, and what they don't cover

](https://wraps.dev/compare/ses-bounce-handling-hand-rolled-vs-wraps)

## Set up SES in one command

Free to start. No credit card required. Your AWS account, your infrastructure, AWS pricing.

[Get Started](https://wraps.dev/docs/quickstart)[Calculate Your Costs](https://wraps.dev/tools/ses-calculator)

Last updated: September 2026. We update this page as pricing and features change.

Seen something inaccurate? [Let us know at support@wraps.dev](mailto:support@wraps.dev)
