From Mailgun
Field mapping, webhook equivalents, and a migration checklist for moving off Mailgun.
The short version
Mailgun takes form-encoded bodies; OutSend takes JSON. That is the largest difference, and it is not a large difference.
Field mapping
| Mailgun | OutSend |
|---|---|
to | to |
from | from |
subject | subject |
html | html |
text | text |
h:Reply-To | replyTo |
o:deliverytime (RFC 2822) | scheduled_at (ISO 8601) |
h:X-My-Header | headers: { "X-My-Header": "…" } |
o:tag | — see note |
Mailgun’s o: options and h: header prefixes become ordinary JSON fields. Tagging is not
in OutSend today; use separate streams, or segments for campaigns.
Event mapping
| Mailgun event | OutSend |
|---|---|
delivered | email.delivered |
failed (permanent) | email.bounced, bounce_type: Permanent |
failed (temporary) | email.bounced, bounce_type: Transient |
opened | email.opened |
clicked | email.clicked |
complained | email.complained |
unsubscribed | email.unsubscribed |
Mailgun signs webhooks with a timestamp-plus-token scheme. OutSend signs an HMAC over the raw body — simpler, and verified the same way every time.
Checklist
- Verify your domain and publish the three DNS records. Merge SPF rather than duplicating it.
- Export suppressions (bounces, unsubscribes, complaints) from Mailgun and import them first.
- Convert your send calls from form-encoded to JSON.
- Replace signature verification with the HMAC check in Webhooks.
- Move one stream, watch the event log, then move the rest.
What is different
Mailgun’s EU and US regions are account-level. In OutSend the sending region is set per domain, so you can keep EU-bound mail in an EU region and everything else elsewhere without running two accounts.