Core difference
Mailgun is strongly domain-centric. Sending, tracking, templates, webhooks, suppressions, and routes are often configured per domain. MailChannels is centered on account or sub-account credentials with JSON send payloads, DKIM authentication, Domain Lockdown, per-message tracking settings, and account or sub-account suppression policy.Feature mapping
| Mailgun concept | MailChannels concept | Migration approach |
|---|---|---|
| Domain-scoped send API | /send payload | Replace Mailgun form-data calls with MailChannels JSON payloads. |
| Sending domains | DKIM and Domain Lockdown | Recreate authentication with MailChannels DKIM records and DNS publication. |
| Account and domain templates | Application-managed Mustache content | Export templates and move storage or versioning outside MailChannels. |
| Per-domain tracking | Per-message tracking_settings | Convert domain defaults into application send-time decisions. |
| Account and domain webhooks | MailChannels webhooks | Recreate webhook endpoint enrollment and update event consumers. |
| Domain suppressions | MailChannels suppression list | Collapse domain-scoped suppression behavior into account or sub-account policy. |
| Subaccounts | MailChannels sub-accounts | Map subaccounts directly when tenant boundaries should remain separate. |
| Inbound routes | No MailChannels Email API equivalent | Replace inbound forwarding or webhook routing with another receiving service. |
Send payload notes
Mailgun send calls commonly use multipart form fields. MailChannels expects JSON. Build a translation layer around the application-level message model rather than copying request fields directly.| Concern | Mailgun behavior | MailChannels behavior |
|---|---|---|
| Request shape | Form-data fields and domain-specific endpoint | JSON payload sent to /send or /send-async |
| Domain selection | Often implicit in endpoint domain | Explicit sender domain and DKIM configuration |
| Recipient variables | Mailgun recipient variables | dynamic_template_data inside MailChannels personalizations |
| Tracking | Domain-level defaults | Per-message tracking_settings |
| Webhooks | Account or domain scoped | MailChannels webhook endpoint with different event schema |
Template migration
Mailgun templates can exist at account or domain scope. MailChannels does not provide the same stored-template control plane, so templates should move into application code or an external template store. If a Mailgun template has domain-specific variants, preserve those variants explicitly in the new template naming or configuration model.Suppression policy
Recommended defaults:| Mailgun source | MailChannels target |
|---|---|
| Complaints and permanent bounces | Suppress as both transactional and non-transactional. |
| Unsubscribes | Suppress as non-transactional unless policy requires blocking all mail. |
| Domain-specific suppressions | Decide whether to preserve isolation with MailChannels sub-accounts or centralize suppression at the account level. |
Inbound migration
Mailgun inbound routes do not map to MailChannels Email API resources. Inventory routes early and replace them with a dedicated inbound mail service, application mailbox processing, or another webhook-based receiving architecture.Cutover checklist
- Replace Mailgun form-data send calls with MailChannels JSON requests.
- Move domain-specific tracking defaults into application send settings.
- Export and relocate templates.
- Create and publish MailChannels DKIM records.
- Recreate webhook consumers for MailChannels events.
- Decide whether Mailgun subaccounts or domains need MailChannels sub-account isolation.
- Replace inbound routes before changing production MX or routing behavior.

