Skip to content

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

MailgunOutSend
toto
fromfrom
subjectsubject
htmlhtml
texttext
h:Reply-ToreplyTo
o:deliverytime (RFC 2822)scheduled_at (ISO 8601)
h:X-My-Headerheaders: { "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 eventOutSend
deliveredemail.delivered
failed (permanent)email.bounced, bounce_type: Permanent
failed (temporary)email.bounced, bounce_type: Transient
openedemail.opened
clickedemail.clicked
complainedemail.complained
unsubscribedemail.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

  1. Verify your domain and publish the three DNS records. Merge SPF rather than duplicating it.
  2. Export suppressions (bounces, unsubscribes, complaints) from Mailgun and import them first.
  3. Convert your send calls from form-encoded to JSON.
  4. Replace signature verification with the HMAC check in Webhooks.
  5. 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.