Email·8 min read·

Self-Host vs SES, Mailgun, Postmark by Volume

Pick the sending path by daily volume, bounce work, and whether users must read the message. Direct VPS SMTP only wins at tiny, well-authenticated mail.

NB

Netbay Infrastructure Team

Netbay Engineering

On this page

The question is not "can Postfix send mail." It can. The question is who owns IP reputation when Gmail decides you look like a burst of password resets. Volume is the cleanest way to choose among sending yourself, relaying through an ESP, or using the ESP's HTTP API. This is not a Mailcow install guide. It is a volume and operations decision.

Three jobs that look like one

  • Transactional: receipts, resets, "someone logged in." Low volume, high importance, must land in the inbox.
  • Operational: cron, monitoring, certificate expiry. Tiny volume, you are the only reader, spam folder is annoying but not fatal.
  • Bulk: newsletters, drip campaigns. Volume spikes, complaint risk, one-click unsubscribe is required in many jurisdictions.

Mixing all three on a new VPS IP is how transactional mail dies. Keep bulk on an ESP with a separate subdomain (news.example.com) and its own DKIM. Keep transactional on a second subdomain or at least a second ESP stream.

Sending path by daily volume under 50 / day smarthost or API direct only if FCrDNS and you read bounces 50 to 10k / day SES / Mailgun / Postmark webhooks, suppression do not send from VPS IP 10k+ / day ESP + dedicated IP warmup, streams, BIMI self-host is a product inbox mail is an ESP problem at almost every volume self-host the MTA, still relay the public hop

What the three ESPs actually differ on

Amazon SES is cheap at scale, regional, and blunt. You bring bounce and complaint handling via SNS. Sandbox mode blocks sending until you request production. Good default for transactional if you will write the plumbing.

Mailgun is an SMTP-first product with routes, stored logs, and a validation API. Fine when several apps already speak SMTP. Watch the validation add-on cost if you verify every address.

Postmark is opinionated about transactional versus broadcast streams. Deliverability to inbox providers is the product. Price per message is higher. The best default when password resets are the business.

None of them care that your app runs on Intel Xeon Platinum in Lucknow. They care that your domain has SPF, DKIM, DMARC, a suppression list, and a complaint rate under their threshold.

When direct VPS send is honest

Direct send can work for a personal domain, a few dozen messages a day, to people who have mailed you before, with PTR, SPF, DKIM, DMARC reject, and a quiet IP. It is a hobby operations load: blocklist monitoring, warmup, and a mailbox you read. It is a poor fit for a product that just launched and must email 4,000 new users tonight.

Self-hosting the inbox (IMAP) is a separate decision from self-hosting outbound. You can collect mail with Dovecot and still outbound through Postmark. Mixing "I want privacy for my mailbox" with "I need Gmail to accept 20,000 receipts" is how projects stall.

bash
# Rough monthly cost sketch (replace with current list prices)
# 20_000 transactional messages
python3 - << 'PY'
ses = 20000 * 0.0001
postmark = 20  # typical starter bucket; check current plan
mailgun = 20000 * 0.0008
print("ses_usd", round(ses, 2))
print("postmark_plan_usd", postmark)
print("mailgun_usd", round(mailgun, 2))
print("vps_time_hours", 4, "is the real direct-send cost")
PY

The VPS invoice is not the outbound cost. Four hours of fighting a 550 5.7.1 after launch is. DNS should match the path you picked, not both paths at once.

ini
; transactional via ESP only (no VPS ip4)
example.com.            IN TXT  "v=spf1 include:spf.mailgun.org -all"
s1._domainkey.example.com.  IN CNAME  s1.domainkey.mailgun.org.

; personal domain sending direct from one VPS
example.com.            IN TXT  "v=spf1 ip4:203.0.113.40 -all"
s1._domainkey.example.com.  IN TXT  "v=DKIM1; k=rsa; p=MIIB..."

A default you can defend

  1. Under a few hundred transactional messages a day: Postmark or Mailgun SMTP, or SES if you already live on AWS APIs.
  2. Thousands a day: SES or Mailgun with a dedicated IP only after the shared pool is clean and warmup is scheduled.
  3. Newsletters: a broadcast stream or a specialist, never the transactional IP.
  4. Direct from the VPS: operational mail to yourself, or a carefully authenticated personal domain. Not customer resets.

Netbay will rent you the VPS. It will not warm an IP or negotiate with Outlook. Plan the ESP in the architecture, not as a panic buy on launch day. Shared IP pools at an ESP are still warmer than a brand-new VPS address, even when that VPS is otherwise well configured.

Takeaway

Choose by volume and by who is blamed when mail is junked. Most products should relay or API-send; self-host outbound only with eyes open. You can spin up an Ubuntu 24.04 instance on Netbay in under 60 seconds and point Postfix at whichever ESP you picked — netbayhosts.in.

Keep reading

Follow along on a real VPS

Deploy Linux in under 60 seconds

These guides are written against Ubuntu, Debian, and RHEL-family images — the same ones on NetBay.

Deploy an instance