Skip to main content

Compare

The European alternative to Postmark

Send over REST or SMTP from a platform that keeps your data in the European Union. Both transports carry the same features, and dedicated IPs come with the plan.

Where your data lives

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

Postmark hosts its service in the United States, and its documentation offers no European region to send from or store in.

The detail is in the data processing agreement.

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 Postmark
Emails a monthmailkubePostmarkSaving with mailkube
3,000Free $0Basic $15$15
10,000Launch $9Basic $15$6
50,000Momentum $19Basic $55$36
100,000Elite $39 1 dedicated IP includedBasic $115 no dedicated IP on this plan$76
250,000Ultimate $129 2 dedicated IPs includedBasic $245 no dedicated IP on this plan$116
500,000Scale $320 4 dedicated IPs includedPro $700.50 4 dedicated IPs added at $50 each$380.50
750,000Volume $490 6 dedicated IPs includedPro $863 6 dedicated IPs added at $50 each$373

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. Postmark sells a dedicated IP from $50 a month, on its Pro tier, to senders above 300,000 emails a month.

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 Postmark
FeaturemailkubePostmarkDocs
Where account data is storedEuropean UnionUnited States
Free plan4,000 a month, 140 a day100 a month
Dedicated IPsIncluded from EliteAdd-on, $50 a monthDocs(opens in a new tab)
Tags per message201Docs(opens in a new tab)
Per-topic opt-out on a sendYesNot documentedDocs(opens in a new tab)
Scheduled sendingIncluded from LaunchNoDocs(opens in a new tab)
Idempotency keysYesNoDocs(opens in a new tab)
Outbound body and link scanYesNot documented
Webhook signingHMACHTTP Basic
Log retention7 to 90 days by plan45 daysDocs(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)
Official SDKsNode, Python, Go, Java, PHP, RubyNode, Python, Java, PHP, Ruby, .NETDocs(opens in a new tab)
Framework packagesDjango, Laravel, Rails, Spring BootRailsDocs(opens in a new tab)
CLIYesYesDocs(opens in a new tab)

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

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.

Postmark relays SMTP as well, on smtp.postmarkapp.com, with headers for a message stream, a single tag and metadata fields. Its documentation describes no header that renders a stored template.

Your stack, already covered

Official SDKs cover Node, Python, Go, Java, PHP and Ruby. 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.

Postmark’s official clients cover Node, Python, Java, PHP, Ruby and .NET, with a Rails gem beside them.

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 Postmark

Install the client for your language, then swap the constructor and the key. The send call keeps its shape, with lower-case field names.

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

Postmark

import * as postmark from "postmark";

const client = new postmark.ServerClient(
  process.env.POSTMARK_SERVER_TOKEN,
);

const email = await client.sendEmail({
  From: "hello@example.com",
  To: "customer@example.com",
  Subject: "Hello world",
  HtmlBody: "<p>It works!</p>",
});
Host
smtp.postmarkapp.com
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 Postmark is the better fit

Postmark splits traffic into message streams, so broadcast mail and transactional mail keep separate reputations and separate logs. mailkube sends your application’s mail on one stream, and a topic on each send carries the opt-outs.

Its entry plan keeps 45 days of history, where the Free and Launch plans here keep 7. Retention reaches 90 days on Volume.

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

Is my data stored in the EU?
Yes. Customer data is stored in the European Union, in the French OVHcloud group's data centres. The detail is in the data processing agreement.
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 many tags can one message carry?
Up to 20, over REST and SMTP alike. Postmark documents one tag per message, with metadata fields beside it.
Can I schedule a send?
Yes, on every paid plan, and the CLI manages the queue. Postmark states that it cannot schedule a message for later.
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 Postmark figures come from?
From the public pricing page and documentation on postmarkapp.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.