Abstract flat illustration of an envelope stepping off a nearly empty hourglass onto a row of seven rounded tiles, the first one highlighted

7 Best Mailgun Alternatives in 2026 (Prices Compared)

Mailgun bills overage you can’t switch off, keeps one day of logs on its Free and Basic plans, and holds a stored copy of each message for 7 days at most. Its free plan sends only to 5 verified addresses until you add a card.

Which replacement fits depends on which of those pushed you, and on one more question: does your mail only go out, or does it come back and need an answer?

The quick answer: if replies matter (an AI agent with its own inbox, a support desk, anything a Mailgun route was forwarding to your code), use CarlyEmail. It gives you real inboxes that thread every conversation and keep it until you delete it, and a send that would cross your cap is refused instead of billed. It’s free for 3 inboxes and 1,000 emails a month with a custom domain and no card. For one-way sending, Postmark keeps 45 days of history and leads on deliverability, Resend has the cleanest API and no sandbox, Bird sells 50,000 emails for $15, and Amazon SES is the cheapest per email.

Prices were read from each vendor’s live pricing page on October 2, 2026, in USD, billed monthly.

Mailgun alternatives compared

Best forFree tierPaid fromHistory keptGoing over your plan
CarlyEmailAgents, support, two-way apps3 inboxes, 1,000 emails/mo, custom domain, no card$20/mo: 25 inboxes, 10K emailsEvery message, until you delete itRefused with a 429 naming the cap; received mail never counts
PostmarkTransactional deliverability100 emails/mo$15/mo: 10K emails45 days (up to 365 on Pro)$1.80 per 1,000 on Basic
ResendDeveloper experience3,000/mo, 100/day, no sandbox$20/mo: 50K emails30 days$0.90 per 1,000 on Pro, paused at 5x quota
Bird (formerly SparkPost)Cheapest flat plan1,000/mo, 50/day, no card$15/mo: 50K emails30 days$0.90 per 1,000, paused at 5x plan
Amazon SESLowest cost per emailNone (sandbox until approved)$0.16 per 1,000, no base feeWhatever you configureNo plan to exceed: pay per email
MailtrapTesting plus sending4,000/mo, 150/day, no card$15/mo: 10K emailsLogs 3 days (Free), 5 (Basic)$1 per 1,000 on Basic, capped
SendGridTeams already on Twilio60-day trial, 100/day$19.95/mo: 50K emailsActivity 3 days (Essentials), 7 (Pro)Hard stop at 10x your plan
Mailgun, for reference100/day; sandbox only until you add a card$15/mo: 10K emailsLogs 1 day (Free, Basic) to 30 (Scale); messages none to 7 days$1.80 to $0.40 per 1,000; can’t be switched off

For one-way volume, every sender on this list beats CarlyEmail on price per message. CarlyEmail is priced per inbox because each address receives, stores and threads its conversations. If all you send is receipts, pick a sender. If mail has to come back and be answered, that’s what CarlyEmail is for, and plenty of teams keep one of each.

Why people leave Mailgun in 2026

  • Overage you can’t switch off. Past your plan, Mailgun keeps sending and bills the excess on the 1st, at $1.80 per 1,000 on Basic, and its help center confirms there’s no off switch. At 20,000 emails a month, Basic plus overage is $33, while Bird, Mailtrap, Resend and SendGrid all sell 50,000 for $15 to $20. A September 2026 Trustpilot reviewer also found their plan “upgraded” without notice; Mailgun replied that the Foundation free trial turns paid after 30 days.
  • One day of logs. Free and Basic keep logs for 1 day, Foundation 5, Scale 30. When a customer asks on Wednesday about Monday’s password reset, a Basic account has nothing to show you. Full plan detail is in Mailgun pricing.
  • Stored messages last 1 to 7 days. Free and Basic keep no copy of the email, Foundation 1 day, Scale up to 7. Mail arriving through Routes is no different, so an app that needs last month’s conversation has to save every message itself.
  • A free plan stuck in the sandbox. Without a card on file, Free sends only from the sandbox domain to up to 5 verified recipients. Resend gives free accounts production access from sign-up, and Bird, Mailtrap and CarlyEmail have free plans that need no card.
  • Suspensions that take inbound down too. Mailgun holds 4.1 out of 5 on Trustpilot across 1,533 reviews, most of them praising fast support. The bad ones are about accounts switched off: a Foundation customer disabled on September 7, 2026 had “no webhooks, no forwarded emails, no transactional emails” and no ticket reply for three days; a furniture maker suspended without warning in July lost its ticketing system, store and project tool at once; and in June an account under review was permanently disabled with Mailgun “unable to fully disclose specific reasons.” On Hacker News in August, a commenter warned a founder building on Mailgun that “one user doing a spam campaign can risk the whole project.”
  • Shared IPs and slow tickets. A PR firm wrote in June that its mail bounced off blacklisted shared IPs and it couldn’t get moved to a dedicated one because it didn’t send enough. A developer on Hacker News who switched providers in 2025 said Mailgun’s IPs “were constantly getting on spam blocklists with yahoo and hotmail.” Another June reviewer, tired of canned replies and 24-hour ticket waits on 2FA mail, moved to another provider for a fraction of the cost. Live chat and phone support start at Scale.

One switch that changes less than it looks: Mailjet. Mailgun bought Mailjet, and Sinch owns both.


1. CarlyEmail

The Mailgun alternative for apps whose mail comes back. A Mailgun route hands your code one POST per message and keeps a copy for a week at most. CarlyEmail starts from the inbox: one API call creates a real address that receives, stores and threads mail, sends with SPF, DKIM and DMARC passing, and replies inside the conversation.

Here’s the Mailgun route handler, rebuilt on CarlyEmail in Python:

from carlyemail import CarlyEmail
from carlyemail.inbound import create_email_router
from fastapi import FastAPI

carly = CarlyEmail()  # reads CARLYEMAIL_API_KEY

# Once: an inbox, and a webhook for mail that lands in it
inbox = carly.inboxes.create({"username": "support"})
carly.webhooks.create({
    "url": "https://yourapp.com/hooks/carlyemail",
    "event_types": ["message.received"],
})  # the response carries a whsec_ signing secret: set it as CARLYEMAIL_WEBHOOK_SECRET

# Then: the handler that replaces your route
app = FastAPI()

def on_email(email):
    # email.text has the quoted chain stripped, like Mailgun's stripped-text
    # email.thread_id is the conversation, which a route never gave you
    carly.messages.reply(email.inbox_id, email.message_id, {"text": "Got it, looking now."})

app.include_router(create_email_router(on_email, path="/hooks/carlyemail", inbox=inbox["email"]))

Before on_email runs, the router has verified the signature over the raw bytes, dropped mail the inbox sent to itself, ignored redeliveries and answered the HTTP request, so a slow model turn doesn’t turn into two replies. When Claire answers, her reply lands in the same thread in her mail client. See receiving.

What changes coming from Mailgun:

  • History that doesn’t expire. Every message is stored, parsed and threaded on arrival, including the replies Outlook mangles, and kept until you delete it, within your plan’s storage (1 GB free, 25 GB at $20). No 1-day log window, no 7-day message window.
  • A cap instead of an overage bill. A request that would cross a limit is refused with a 429 naming the cap. Nothing degrades quietly and nothing extra lands on your card on the 1st. Only sent recipients count toward the email quota; received mail never does.
  • A real free plan. No card, 3 inboxes, 1,000 emails a month, and your own domain with SPF, DKIM and DMARC set up for you (custom domains). No “sent via” footer on any plan.
  • Spoofed mail sorted before your code sees it. Mail failing SPF, DKIM or DMARC arrives as message.received.unauthenticated and spam as message.received.spam, so a forged sender never reaches your message.received handler. It’s kept and labelled, so you can still look. See webhooks and email to webhook.
  • Rules you can read in advance. The deliverability guide publishes the numbers that trigger an account review (5% hard bounces, 0.1% complaints) and the higher ones where sending may pause. Bounced and complained addresses are suppressed automatically, reputation is tracked per organization, and no tracking pixels or rewritten links are added to your mail.
  • Per-customer isolation on every plan. Mailgun keeps subaccounts for Enterprise. CarlyEmail gives each customer a pod, with API keys scoped to one pod or one inbox, so Josh’s tenant can’t read Emily’s mail. Another organization’s resource returns 404.
  • Room for the team. 3 people on free and 10 on Startup, where Mailgun Free and Basic are single-user.
  • Works with your stack. REST, TypeScript and Python SDKs, a CLI, and a hosted MCP server at https://api.carlyemail.com/mcp with 33 tools (MCP guide). Guides cover LangChain, the OpenAI Agents SDK, the Claude Agent SDK, the Vercel AI SDK, Mastra and Cloudflare Agents. You keep your agent and your model key.

An agent can sign itself up. Paste this into any agent:

Read https://docs.carlyemail.com/llms.txt and set yourself up with an email address.

Until the owner confirms a 6-digit code, that account can only email its owner, which is what makes self-signup safe.

Pricing: Free is $0 for 3 inboxes and 1,000 emails a month (100 a day). Startup is $20 a month for 25 inboxes, 10,000 emails and 10 custom domains, with no daily cap. Business is $200 a month for 250 inboxes and 100,000 emails. Enterprise covers higher volume, a dedicated sending domain or custom terms. Every plan gets the whole API, and cancelling drops you to free without deleting anything.

Best for: AI agents with their own addresses, support desks, per-customer inboxes, and anything you built on Mailgun Routes that has to answer the mail it receives. The quickstart gets a first inbox running in a few minutes, and email APIs for AI agents maps the build patterns. Get started with CarlyEmail.


2. Postmark

The pick if you’re leaving over logs or deliverability. Postmark keeps 45 days of full message history by default, and Pro lets you stretch that to 365. It separates transactional and broadcast mail into different streams so a newsletter can’t drag down your password resets, and its Basic plan includes 5 custom sending domains where Mailgun Basic has 1.

Best for: transactional mail where landing in the inbox, and proving it later, matter more than the price per message.

Pricing: Free is 100 emails a month and doesn’t expire. Basic is $15 for 10,000 ($1.80 per extra 1,000), $55 for 50,000 and $115 for 125,000. Pro starts at $16.50 ($1.30 per extra 1,000) and Platform at $18 ($1.20). Monthly billing only. Dedicated IPs from $50 a month, for senders at 300,000 a month or more on Pro and up.

Limitations: inbound processing starts at Pro, and each processed inbound message counts as one email toward your volume. Inbound arrives as a JSON webhook, so matching replies into conversations is still your build. The free tier is a test allowance.


3. Resend

The developer favorite, and the clean answer to Mailgun’s sandbox: Resend’s docs say every account, free included, has production access from sign-up, with no approval step. Overage on paid plans pauses at 5 times your monthly quota by default instead of running open-ended, and data is kept 30 days on Free, Pro and Scale. Resend also receives mail now through an email.received webhook, and has an Inboxes API in private beta.

Best for: developers who want the nicest API, React Email templates and a free tier that works on day one.

Pricing: Free is 3,000 emails a month, capped at 100 a day, with 3 domains. Pro is $20 for 50,000 and $35 for 100,000, with overage at $0.90 per 1,000. Scale runs from $90 for 100,000 to $1,150 for 2.5 million. Dedicated IP $30 a month on Scale. Monthly only. Detail in Resend pricing.

Limitations: each received email counts against the daily and monthly quota like a send, so on Free an agent that receives 60 emails in a day can only send 40. Reading inbound needs a full-access API key. More options in Resend alternatives.


4. Bird (formerly SparkPost)

The cheapest flat plan here: $15 buys 50,000 emails, five times Mailgun Basic’s volume for the same money. SparkPost now sells as Bird’s Email API, keeps 30 days of data on every plan, and pauses sends at 5 times your plan by default instead of billing without limit.

Best for: Mailgun Basic and Foundation customers who mostly want more one-way volume per dollar.

Pricing: Free is 1,000 emails a month (50 a day) with no credit card. Startup is $15 for 50,000 or $30 for 100,000, with 10 sending domains. Growth runs $80 for 100,000 to $1,039 for 2.5 million. Overage is $0.90 per 1,000. Dedicated IPs are $24.95 a month each, on Growth only.

Limitations: overage costs three times Startup’s included rate, and Free and Startup each allow 1 webhook endpoint. Everything below Growth sends from a shared IP, the same complaint that drives many people off Mailgun.


5. Amazon SES

The cost floor, and the end of overage as a concept: you pay per email. Since July 21, 2026, new accounts start on SES’s Essentials plan at $0.16 per 1,000 with no base fee, and accounts can switch to à la carte at $0.10 per 1,000 plus $0.12 per GB sent.

Best for: high-volume senders already on AWS with engineers to run the plumbing.

Pricing: 100,000 emails a month is about $16 on Essentials, against $75 on Mailgun Foundation. Pro is $105 a month plus $0.22 per 1,000. Standard dedicated IPs are $24.95 each per month. Receiving on à la carte costs $0.10 per 1,000 plus $0.09 per 1,000 chunks of 256 KB. Detail in Amazon SES pricing.

Limitations: new accounts start in a sandbox (200 emails a day, verified recipients only) until AWS approves production access, which is Mailgun’s free-plan gate in another form. Inbound arrives as raw MIME in S3 or SNS, so parsing, threading, storage and bounce handling are yours to build.


6. Mailtrap

Started as an email testing sandbox and now sells sending, marketing and inbound, plus an inbox product for AI agents. Its Basic tier stretches much further than Mailgun’s for the money: $20 for 50,000 and $30 for 100,000, with 3 users and 5 domains.

Best for: teams that want test environments and production sending under one vendor.

Pricing: Free is 4,000 emails a month (150 a day) with no credit card. Basic is $15 for 10,000, $20 for 50,000 or $30 for 100,000, with extra emails at $1 per 1,000 and overages capped. Business, which adds a dedicated IP, runs $85 for 100,000 to $450 for 750,000.

Limitations: logs last 3 days on Free and 5 on Basic, barely ahead of Mailgun. The monthly quota is shared between sending and receiving, so inbound mail eats your sends.


7. SendGrid

Mailgun’s closest like-for-like, and cheaper than it between roughly 13,000 and 100,000 emails a month: Essentials is $19.95 for 50,000 and $34.95 for 100,000, against Mailgun’s $35 and $75. Since March 2026, Essentials and Pro stop at 10 times your plan rather than billing indefinitely.

Best for: teams already on Twilio, or moving off Mailgun purely on price in that volume band.

Pricing: Essentials is $19.95 for 50,000 or $34.95 for 100,000. Pro runs $89.95 for 100,000 to $1,099 for 2.5 million, with a dedicated IP included. Monthly only. Detail in SendGrid pricing, and the head-to-head in SendGrid vs Mailgun.

Limitations: there’s no free plan anymore, only a 60-day trial at 100 emails a day. Essentials keeps 3 days of email activity, Pro 7. And if suspensions or support are why you’re leaving Mailgun, SendGrid rates 1.2 out of 5 on Trustpilot, with 2026 reviews describing weekend suspensions and unanswered tickets. Its Inbound Parse webhook stores nothing. More in SendGrid alternatives.


Leaving Mailgun: suppressions, logs, MX records and the 1st

  1. Export your suppressions first. Pull bounces, complaints and unsubscribes out of Mailgun and load them into the new provider before the first send. On CarlyEmail they go on the send block list: carly.lists.create_org_entry("send", "block", {"entry": "old@example.com", "reason": "bounced on Mailgun"}). See allow and block lists.
  2. Save the history you need now. On Free and Basic, Mailgun’s logs only reach back one day, and stored messages last 7 days at most. Whatever you want to keep has to come out before you close the account.
  3. Run DNS side by side. Add the new provider’s SPF and DKIM records next to Mailgun’s, cut sending over, and remove Mailgun’s include once the last queued mail has drained. SPF allows 10 DNS lookups, so check the merged record. Warm a new domain up from tens of messages a day.
  4. Move inbound by its MX record. If a Mailgun route receives on a subdomain like mg.yourcompany.com, point that subdomain’s MX at the new provider. CarlyEmail recommends a subdomain too, and npx carlyemail domain mail.yourcompany.com --zone prints every record as a zone file you can import.
  5. Mind the billing calendar. Mailgun bills overage on the 1st, schedules downgrades for the next cycle, and turns a Foundation free month into a paid plan after 30 days. Cancel before the 1st you don’t want to pay for.

For the rest of the field, see the best email APIs and AgentMail alternatives for agent-inbox APIs specifically.

FAQ

What is the best Mailgun alternative?

It depends on what your mail does. For apps whose mail comes back and needs an answer (AI agents, support, anything built on Mailgun Routes), CarlyEmail gives you real inboxes with threads, signed webhooks and mail kept until you delete it. For one-way transactional mail, Postmark leads on deliverability and history, Resend on developer experience, Bird on cheap volume and Amazon SES on price per email.

Is there a free alternative to Mailgun?

Yes. CarlyEmail is free for 3 inboxes and 1,000 emails a month with a custom domain and no card. Bird (1,000 a month), Mailtrap (4,000 a month, 150 a day) and Brevo (300 a day) also need no card, and Resend’s free tier (3,000 a month, 100 a day) has production access from sign-up. Postmark’s 100 a month is a test allowance.

What is the cheapest Mailgun alternative?

Amazon SES, at $0.16 per 1,000 emails on its default Essentials plan (about $16 for 100,000) or $0.10 per 1,000 on à la carte. Among flat plans, Bird charges $15 for 50,000 and $30 for 100,000, and Mailtrap $20 for 50,000 and $30 for 100,000, against Mailgun’s $35 for 50,000 and $75 for 100,000.

Which Mailgun alternatives keep logs longer?

Postmark keeps 45 days by default and up to 365 on Pro and Platform. Resend keeps 30 days on Free, Pro and Scale, and Bird 30 days on every plan. SendGrid keeps 3 days of activity on Essentials and 7 on Pro, and Mailtrap 3 to 5 on its lower tiers. CarlyEmail keeps every message until you delete it, within your plan’s storage.

Is Mailjet a Mailgun alternative?

Not in any way that changes the company you depend on. Mailgun acquired Mailjet, and Sinch owns both, so moving from one to the other keeps you with the same owner.

Can CarlyEmail replace Mailgun Routes?

Yes, for mail that needs an answer. Point the receiving domain’s MX at CarlyEmail, create an inbox per address, and a signed message.received webhook carries a thread_id and quote-stripped text to your handler, which replies in the same thread. Unlike a route, the mail stays stored and threaded after the POST.

Give your agent a real inbox

Your agent gets its own email address. People can email it, it answers in the same thread, and your personal inbox stays out of it. Start with 3 inboxes, no card needed.

Get started
See the prompt
Read https://docs.carlyemail.com/llms.txt and set yourself up with an email address.