A Mailgun alternative with inbound routing and webhooks
Cloudflare Email Routing receives your mail, MarkRelay stores it and posts each message to your app as an HMAC-signed inbound webhook, and replies go out from the same address.
Facts checked
The short answer
Need Mailgun-style inbound routes and webhooks without a monthly plan sized by volume? MarkRelay receives mail through Cloudflare Email Routing and posts each message to your app as an HMAC-signed webhook, in your own Cloudflare account. Mailgun's Free plan has 1 inbound route, Basic (from $15/month) has 5 and 1 sending domain, and full inbound routing or more domains start with Foundation at $35/month. MarkRelay is the Email Worker for you: you don't write the email() handler, parsing or webhook delivery yourself, and every message also lands in a mailbox your team can open and answer.
Side by side
| Feature | MarkRelayLicense from $99/yr | MailgunHosted | Your own Email WorkerCloudflare, code you write |
|---|---|---|---|
| Inbound routes | Email Routing rules per address or catch-all; webhooks scoped to an owner's access, one domain or selected mailboxes | Free 1, Basic 5, Foundation and up: full inbound routing | Email Routing rules to your Worker |
| Inbound webhook | Parsed JSON: text, HTML, headers, attachment list | Route forward() to your URL | You write it |
| Webhook signature | HMAC-SHA256 of timestamp and raw body | HMAC-SHA256 of timestamp and token | You write it |
| Retries | Up to 3; paused after 20 failures in a row | — | You write it |
| Log retention | Send and receive logs 90 days; messages kept until you delete them | Free and Basic 1 day, Foundation 5 days, Scale 30 days | Whatever you store |
| Price | $99/yr plus Cloudflare usage | Free 100/day; Basic $15/mo (10,000 emails); Foundation $35/mo (50,000); Scale $90/mo (100,000) | Workers pricing; Email Routing is free |
| Web inbox for your team | Yes | No | No |
| Reply in the same thread | POST /emails/{id}/reply | — | Email Workers can reply |
| Where mail is stored | Your own Cloudflare D1 and R2 | Mailgun | Wherever your Worker stores it |
| Needs | Domains on Cloudflare DNS; Workers Paid to send | Any DNS host | Domains on Cloudflare DNS |
Inbound routes
- MarkRelay
- Email Routing rules per address or catch-all; webhooks scoped to an owner's access, one domain or selected mailboxes
- Mailgun
- Free 1, Basic 5, Foundation and up: full inbound routing
- Your own Email Worker
- Email Routing rules to your Worker
Inbound webhook
- MarkRelay
- Parsed JSON: text, HTML, headers, attachment list
- Mailgun
- Route forward() to your URL
- Your own Email Worker
- You write it
Webhook signature
- MarkRelay
- HMAC-SHA256 of timestamp and raw body
- Mailgun
- HMAC-SHA256 of timestamp and token
- Your own Email Worker
- You write it
Retries
- MarkRelay
- Up to 3; paused after 20 failures in a row
- Mailgun
- —
- Your own Email Worker
- You write it
Log retention
- MarkRelay
- Send and receive logs 90 days; messages kept until you delete them
- Mailgun
- Free and Basic 1 day, Foundation 5 days, Scale 30 days
- Your own Email Worker
- Whatever you store
Price
- MarkRelay
- $99/yr plus Cloudflare usage
- Mailgun
- Free 100/day; Basic $15/mo (10,000 emails); Foundation $35/mo (50,000); Scale $90/mo (100,000)
- Your own Email Worker
- Workers pricing; Email Routing is free
Web inbox for your team
- MarkRelay
- Yes
- Mailgun
- No
- Your own Email Worker
- No
Reply in the same thread
- MarkRelay
- POST /emails/{id}/reply
- Mailgun
- —
- Your own Email Worker
- Email Workers can reply
Where mail is stored
- MarkRelay
- Your own Cloudflare D1 and R2
- Mailgun
- Mailgun
- Your own Email Worker
- Wherever your Worker stores it
Needs
- MarkRelay
- Domains on Cloudflare DNS; Workers Paid to send
- Mailgun
- Any DNS host
- Your own Email Worker
- Domains on Cloudflare DNS
Mailgun facts from mailgun.com/pricing and its webhook security docs, checked October 18, 2026. “—” means those pages do not say.
Which one fits you
Choose Mailgun if
- You send high volumes and want dedicated IPs as you grow.
- Your domains are not on Cloudflare.
- You only need inbound parsing, not mailboxes.
Write your own Email Worker if
- You want to handle each message in code and nothing more.
- You are happy to build parsing, storage, signing and retries yourself.
Choose MarkRelay if
- You want inbound webhooks at low volume without a plan sized by volume.
- You send from several domains without moving to a higher plan.
- Every message should also be in a mailbox people can read and answer.
- Your app should reply from the same address over HTTP.
- Mail should stay in your own Cloudflare account.
What sending and receiving cost
| Example | MailgunFoundation $35/mo, first plan with full inbound routing | MarkRelayLicense $8.25/mo ($99/yr) + Cloudflare | You savePer month |
|---|---|---|---|
| 10,000 emails a month, plus inbound | $35Foundation | $15.70$8.25 license + $5 Workers Paid + $2.45 sending | $19.3055% less |
| 10,000 emails a month on 3 domains | $35Foundation; Basic has 1 domain | $15.70$8.25 license + $5 Workers Paid + $2.45 sending | $19.3055% less |
| 50,000 emails a month, plus inbound | $35Foundation | $29.70$8.25 license + $5 Workers Paid + $16.45 sending | $5.3015% less |
10,000 emails a month, plus inbound
Mailgun
MarkRelay
10,000 emails a month on 3 domains
Mailgun
MarkRelay
50,000 emails a month, plus inbound
Mailgun
MarkRelay
MarkRelay: the Annual license ($99/year) spread over 12 months, $8.25 a month whatever the volume, plus the Cloudflare bill: Workers Paid is $5/month with 3,000 sent emails included, then $0.35 per 1,000, and receiving is free. With Lifetime ($249 once), later years cost only the Cloudflare bill. Mailgun: Foundation ($35/month, 50,000 emails) is the first plan with full inbound routing; Basic ($15/month) covers 1 domain, 5 routes and 10,000 emails. MarkRelay charges nothing per domain. Writing your own Email Worker costs the same Cloudflare bill plus your time.
How mail flows through your Cloudflare account
Cloudflare receives and sends. MarkRelay is the mailbox in between, running as your own Worker.
Receive
- Senderwrites to support@yourdomain.com
- Email RoutingCloudflare, free on any plan
- MarkRelay Workerfiles it in the mailbox
- Your D1 + R2messages and attachments
Reply
- Webmail or APIa teammate, an app or an agent
- MarkRelay Workerchecks mailbox access
- Email SendingCloudflare, in Workers Paid
- Recipientsees support@yourdomain.com
Common questions
Is there a Mailgun alternative with inbound routing and webhooks that is cheaper at low volume?
Yes. With MarkRelay, Cloudflare Email Routing receives your mail for free and each message reaches your app as an HMAC-signed inbound webhook. At 10,000 emails a month, MarkRelay comes to about $15.70 a month (the license spread over the year plus Cloudflare), against $35 for Mailgun Foundation.
How do Cloudflare Email Routing and Email Workers fit in?
Email Routing receives mail for your domain and can hand each message to a Worker with an email() handler, often called an Email Worker. MarkRelay is that Worker, already written: it parses and stores the message, posts the inbound webhook, and lets you reply over its HTTP API.
How do I verify the webhook?
Each request carries X-MarkRelay-Timestamp and X-MarkRelay-Signature. The signature is the HMAC-SHA256 of the timestamp, a dot and the raw body, keyed with the webhook's secret. Delivery is retried up to 3 times.
Is there a limit on routes or webhooks?
MarkRelay sets no limit on webhooks. Each one can follow its owner's access, cover one domain or include selected mailboxes. Addresses are routed with Cloudflare Email Routing rules, per address or with a catch-all.
How long are logs kept?
Send and receive logs are deleted automatically after 90 days. Messages stay in your own D1 and R2 until you delete them.
Keep reading
Own your email stack today
Buy MarkRelay once and run it in your Cloudflare account. MarkRelay adds no per-message or per-seat charge; Cloudflare usage and service limits remain separate.
