Skip to main content

Compare

The cheaper alternative to Mailgun

Send over REST or SMTP for less than Mailgun asks at every volume on this page. Logs stay for up to 90 days, and dedicated IPs come with the plan.

What you pay

Both platforms price by monthly volume. The table takes seven volumes. Each row shows the cheapest plan on each side, in your region’s currency.

Monthly price by volume, mailkube against Mailgun
Emails a monthmailkubeMailgunSaving with mailkube
3,000Free $0Free $01,000 more free emails a month
10,000Launch $9Basic $15$6
50,000Momentum $19Foundation $35$16
100,000Elite $39 1 dedicated IP includedFoundation $75 1 dedicated IP included$36
250,000Ultimate $129 2 dedicated IPs includedScale $274 1 dedicated IP included 1 dedicated IP added at $59$145
500,000Scale $320 4 dedicated IPs includedScale $577 1 dedicated IP included 3 dedicated IPs added at $59 each$257
750,000Volume $490 6 dedicated IPs includedScale $845 1 dedicated IP included 5 dedicated IPs added at $59 each$355

Dedicated IPs are included from the Elite plan. Elite carries one at 100,000 emails a month, and Volume carries six at 750,000. Each new one warms on a six-stage ladder, from 50 messages a day to 10,000. Mailgun includes one from its Foundation plan at that same volume, and sells further IPs at $59 a month each.

Feature by feature

The rows below hold what each platform documents today. A docs link opens the mailkube page behind that row.

Feature by feature, mailkube against Mailgun
FeaturemailkubeMailgunDocs
Where account data is storedEuropean UnionEuropean Union or United States
Free plan4,000 a month, 140 a day100 a day
Log retention7 to 90 days by plan1 to 30 days by planDocs(opens in a new tab)
Dedicated IPsIncluded from EliteIncluded from FoundationDocs(opens in a new tab)
Sending domainsUnlimited1 / 1,000Docs(opens in a new tab)
Tags per message203Docs(opens in a new tab)
Per-topic opt-out on a sendYesNot documentedDocs(opens in a new tab)
Outbound body and link scanYesNot documented
Idempotency keysYesNoDocs(opens in a new tab)
REST APIYesYesDocs(opens in a new tab)
SMTP relayYesYesDocs(opens in a new tab)
Stored templates, versionedYesYesDocs(opens in a new tab)
Scheduled sendingIncluded from LaunchYesDocs(opens in a new tab)
Webhook signingHMACHMAC
Official SDKsNode, Python, Go, Java, PHP, RubyNode, Python, Go, Java, PHP, RubyDocs(opens in a new tab)
Framework packagesDjango, Laravel, Rails, Spring BootNoDocs(opens in a new tab)
CLIYesNoDocs(opens in a new tab)

"Not documented" means the public Mailgun documentation does not describe it. Checked on September 28, 2026.

Log retention is where the two part company. Your plan keeps 7 days on Free and 90 days on Volume, so a support question from last month still has an answer. Mailgun keeps one day on its two cheapest plans, five days on Foundation and 30 days on Scale.

Where your data lives

Customer data is stored in the European Union. Our infrastructure runs in European data centres, in the French OVHcloud group.

Mailgun sells a European region as well, and the messages you send through it stay there. mailkube runs one region, and every account is in it.

The detail is in the data processing agreement.

Two transports, headers included

POST to the REST API, or point the SMTP client you already run at smtp.mailkube.com. Everything the API takes as a JSON field, SMTP takes as a header. Those headers are stripped before the message reaches the recipient.

  • X-Mailkube-Tags carries the same tag list as the REST tags field
  • X-Mailkube-Topic attributes the send to a topic, so recipients who opted out are filtered
  • X-Mailkube-Template-Id and X-Mailkube-Template-Version render a saved template server-side

An SMTP send is the same message as an API send. It lands in the same logs, counts against the same quota and fires the same webhook events. The SMTP reference(opens in a new tab) lists every header, reply code and rate limit.

Mailgun relays SMTP on smtp.mailgun.org and documents headers of its own for a tag, a template and a template version. A message there carries up to 3 tags, against 20 here, and its documentation describes no per-topic opt-out on a send.

Your stack, already covered

Official SDKs cover Node, Python, Go, Java, PHP and Ruby, the same six languages Mailgun’s own clients cover.

Django, Laravel, Rails and Spring Boot each get a package of their own. It plugs into the framework’s own mail layer. Every client verifies your webhook signatures for you.

The CLI is one binary. It sends over either transport and manages scheduled sends. While you develop, it runs a local webhook receiver. It ships a skill file, so a coding assistant reads the real command surface. Start from the SDK documentation(opens in a new tab) or the CLI guide(opens in a new tab) .

Migrating from Mailgun

Install the client for your language, then swap the constructor and the key. The send call keeps its shape, and the domain argument drops out of it.

The same send, Mailgun on the left and mailkube on the right

Mailgun

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,
});

const message = await mg.messages.create("example.com", {
  from: "Acme <hello@example.com>",
  to: ["customer@example.com"],
  subject: "Hello world",
  html: "<p>It works!</p>",
});
Host
smtp.mailgun.org
Port
587

mailkube

import { Mailkube } from "@mailkube/mailkube-node";

const client = new Mailkube({ apiKey: process.env.MAILKUBE_API_KEY });

const email = await client.emails.send({
  from: "Acme <hello@example.com>",
  to: "customer@example.com",
  subject: "Hello world",
  html: "<p>It works!</p>",
});
Host
smtp.mailkube.com
Port
587

Migration is frictionless over SMTP as well. Change the host, the port and the credential in your mailer, and keep everything else as it is. The messages you already send go out unchanged, and tags, topics and templates ride along as headers when you want them. Nothing has to move on a set day: run both platforms side by side and switch one service at a time. The quickstart(opens in a new tab) covers the REST path and the SMTP guide(opens in a new tab) covers the relay.

When Mailgun is the better fit

Mailgun sells address validation beside the relay, and an inbox-placement product on top of it. mailkube sends your application’s mail and tells you what happened to it.

Its plans also carry mailing lists and send-time optimisation per message. Those answer a different job than this platform does.

The pricing page has every plan in full. The REST API and SMTP relay pages go deeper on the two transports.

Frequently asked questions

Frequently asked questions

How much cheaper is it than Mailgun?
At every volume in the table above. The Free plan carries 4,000 emails a month against 100 a day, and from 100,000 emails a month the saving runs from $36 to $355, dedicated IPs matched on both sides.
Can I keep my SMTP configuration?
Yes. Point your mailer at smtp.mailkube.com on port 587 with a credential bound to your verified domain. Tags, topics and templates then travel as X-Mailkube headers on the message you already send.
How long are my logs kept?
From 7 days on the Free plan to 90 days on Volume. Mailgun keeps one day on its Free and Basic plans, five days on Foundation and 30 on Scale.
What happens when I reach my monthly limit?
Sending pauses. You receive an alert before that happens, and an upgrade restores sending at once. There is no overage charge on any plan.
Do I need a dedicated IP?
Most senders do well on the shared pool. Dedicated IPs are included from the Elite plan, one at 100,000 emails a month and six at 750,000. Each new one is warmed for you on a six-stage ladder.
Where do the Mailgun figures come from?
From the public pricing page and documentation on mailgun.com. The date under the feature table is the day they were last read. A change on their side moves that date.

Send your first email today

Start free, no card. Point an existing SMTP client at us, or install an SDK and make one POST.