Product

Everything your email touches, in one place.

Mailway sits between your app and the providers you already pay for, adding routing, failover, a searchable archive, and proof of delivery without changing how you send.

An email gateway sits between your application and its email providers: your app hands a message to one endpoint, and the gateway decides which provider carries it, retries when one fails, and keeps the record. Mailway is that layer for transactional email. Adopting it is a config change: standard SMTP or HTTP in, your own provider accounts out.

Every message first walks the rules gate, which applies the suppression list and then your own routing policy. From there the four pillars below are the product: a byte-for-byte archive, automatic failover, a per-message timeline, and signed proof of delivery. Everything is BYOK. Mailway routes and records; your providers deliver and bill you at their prices.

How it works

The whole migration
is a config change.

the migration — mailer config
const transporter = nodemailer.createTransport({
- host: "smtp.sendgrid.net",
+ host: "smtp.mailway.net",
port: 587,
auth: { user, pass },
});
1

Point your app at Mailway

Swap host, port, and credentials in the mailer you already use: Nodemailer, Laravel, Rails, smtplib, whatever ships your mail today. 7 SMTP ports open, so it works even where your cloud blocks the usual ones. Prefer HTTP? There's a REST API.

2

Paste in the keys you already have

Add your provider API keys, assign them to projects, pick failover, free-first, round-robin, or random per project. All from the dashboard, with no deploy and no DNS archaeology.

3

Mailway takes it from here

Routing, retries, suppression, logging, archive. The next time someone asks about an email, you look it up instead of guessing. And switching providers never touches your code again.

Join the waitlistprivate beta · invites go out one at a time
The rules gate

One message in.
A defensible decision out.

Your app should send mail, not carry routing policy. Inside the gateway every message walks the same gate: the suppression list first, then your rules, which can tag it, hold it, or reroute it before any provider is chosen. Every decision lands on the mail's timeline; changing the policy is a console edit, not a redeploy.

stored before 250 OKrules versionedevery decision recorded
mailway · rules enginepolicy v.37
Incoming messagebilling policy
Invoice #2041
84 KB · 1 attachment
from
billing@acme.eu
to
customer@gmail.com
raw MIME stored — then 250 OK
Evaluate policysuppressions → rules
subjectcontains “invoice”match
recipient@gmail.commatch
size84 KBpass
Committed actions
tag · billingbcc · accountingroute · ses-eu
Decision recordm.01K3F2…VQ7D
Amazon SES · eu-central-1
250 accepted · 89 ms

3 rules evaluated · 2 matched · decision on the timeline

appended to the mail's timeline
Archive

Your app doesn't have a sent folder.
Mailway gives it one.

Every mail client keeps what you send. Your app sends the more consequential mail and keeps none of it: receipts, reset links, and contracts vanish the instant SMTP takes them. Mailway archives each message exactly as sent, searchable by sender, recipient, subject, and state. So when finance asks about an invoice from last March, you open the email itself instead of a log line that mentions it.

storedthe raw message, byte for byte: headers, attachments, original DKIM signature intact
foundby sender, recipient, subject, plus operators like state:delivered, before:2024-06, rescued:
openedrendered · plain text · headers · raw source · attachments, unchanged years later
console.mailway.net — Mails
invoice state:delivered
Invoice #20412026-04-10✓ delivered
Invoice #1663 — March services2024-03-04✓ delivered
Invoice #1408 — retainer, April2023-04-18✓ delivered
Invoice #1129 — Q2 hosting2022-06-30✓ delivered
Invoice #0847 — onboarding fee2021-09-14✓ delivered
5 of 214 matcheson the record since 2020
Routing & Failover

Providers fail.
Your email shouldn't.

Your app hands off once, gets 250 OK, and moves on. Mailway reads whatever the provider says back: a timeout, a rate limit, an empty credit balance. Then it reroutes in milliseconds. Here's a genuinely bad day, handled without a single page going out:

Your Appsmtp.mailway.netSMTPROUTES · LOGS · FAILS OVERAmazon SES421 timeoutSendGrid401 credits exhaustedMailgun250 accepted · 97ms

Four routing strategies

reliability
Failover

Primary provider first. On timeout, rate limit, or outage, the next one takes over automatically with exponential backoff.

cost
Free-first

Spend every provider's free tier before a single paid send. Paid rates only kick in once the free capacity is gone, and exhausted providers stay available for failover.

balance
Round-robin

Distribute volume evenly across providers. Balance spend, spread sender reputation, and stay under per-provider rate limits.

simplicity
Random

A coin flip per message. For when you want the volume spread and nothing else to think about.

Not all errors are equal

provider saysclassmailway does
550 user not foundhard bouncestop · suppress · log
401 credits exhaustedbilling / quotafailover · flag the account
429 rate limitedsoft bouncefailover to next provider
421 timeoutconnectionfailover with backoff

Hard bounces are never retried. The address goes straight to your suppression list, where it stops hurting your sender reputation. Everything recoverable fails over. Nothing gets retried into a blocklist.

Observability

250 OK is not
the whole story

Most providers stop at "accepted" and wish you luck. Mailway follows the message the rest of the way: every attempt, every provider response, every error code, down to the raw SMTP session. So when support asks "did that email go out?", you answer with a timeline, not a shrug.

And because every provider you use reports back into the same gateway, outcomes land in one normalized delivery history, where an SES bounce and a Mailgun bounce read the same, side by side. No single provider can see across your whole sending; the gateway in front of them can.

  • Search by subject, sender, recipient, or state
  • Real outcomes in one vocabulary across providers: delivered, bounced, complained
  • A hard bounce learned on one provider blocks the address on all of them
  • The raw SMTP session, kept for every connection
  • Per-project analytics and 30-day volume
console.mailway.net
invoice to:customer@
Invoice #2041
customer@gmail.com
delivered2m
Password reset
anna@outlook.com
delivered9m
Order confirmation
old-address@fake.io
bounced14m
Weekly digest
team@company.eu
delivered22m
Shipping update
leo@proton.me
queued31m
Delivery timeline — Invoice #2041
accepted via SMTP :587 09:41:02
SES 421 timeout failover: SendGrid
delivered · 142ms · DKIM sealed · archived
Mailway · Email Notary
Certificate
of Delivery
message m.01J9ZK3VQ7
content sha-256 9f2c…a41e ✓ match
dkim d=yourapp.com ✓ verified
accepted SendGrid · 2026-04-10T09:41:02Z
delivered 2026-04-10T09:41:03Z
signature ed25519:Kx4v…9dQ=
verify mailway.to/m/f3XK…
Notary

"I never got that email."
Here's the receipt.

Every message is archived with its raw MIME and original DKIM signature, and can be turned into an Ed25519-signed proof-of-delivery certificate, countersigned by an independent time authority so it can't be back-dated. The signature verifies in anyone's browser, so there's no need to trust our database, and the timestamp doesn't even trust us. Share the rendered email itself with a private mailway.to link, and settle the dispute instead of having it.

Retention on paid plans
SendGrid paid
3 days
Mailgun Foundation
5 days
Postmark (best-in-class)
45 days
Mailway
90d → years

90 days on Pro, 6 months on Team, 1 year on Business, unlimited on Enterprise, with 3-to-7-year add-ons for SOX, HIPAA, and FINRA record-keeping. All of it EU-hosted, all of it searchable.

Your mailer config has
one line to change

Mailway is in private beta, and we onboard teams one at a time. Leave your email and we'll send your invite when it's your turn.

read the docs meanwhile →

join the waitlist — mailway.net

Your invite, one email away.

Mailway is in private beta, and we onboard teams one at a time, in order. Leave your email and yours arrives when it's your turn.