I just launched Social SDK. Come check it out →
Email SDK
Adapters

Mailgun

Send through the Mailgun Messages API with domain-scoped multipart sends, h:/v:/o: field mapping, and full field support.

Capabilities

Repeated headersIdempotencySchedulingPersonalized
YesnoneYesnative

These values come from the adapter's exported capabilities declaration. The field support matrix covers normalized message fields.

The Mailgun adapter calls the Mailgun Messages API with plain fetch. It is the one adapter that posts multipart form data instead of JSON, using Mailgun's prefixed field names: h: for headers, v: for metadata variables, o: for sending options. Every send is scoped to the domain you configure.

Mailgun logo
Mailgun@opencoredev/email-sdk/mailgun
Provider docs

Configure

Grab an API key from the Mailgun dashboard and note the sending domain it belongs to. Both are required.

Prop

Type

EU domains need the EU base URL

Domains created in Mailgun's EU region only respond on baseUrl: "https://api.eu.mailgun.net". Against the default US origin they fail with a 404.

Send

Mailgun maps every common field: cc, bcc, replyTo, headers (as h:Name), attachments (multipart attachment/inline parts by disposition), tags (values as o:tag), and metadata (as v:key variables, surfaced later in webhooks and logs). sendAt becomes a native scheduled send via o:deliverytime (RFC 2822); Mailgun accepts up to 3 days out on most plans, 7 with extended storage.

The response id is Mailgun's queued message id from the response body. Match it against delivery events in webhooks or the Mailgun logs.

Personalized sends

Mailgun implements native sendPersonalized, so all recipients and variables travel in one request through Mailgun's recipient-variables field.

Verify from the CLI

Credentials also work as flags: --api-key, --domain, and --base-url (or MAILGUN_BASE_URL) override the environment. Drop --dry-run for one real send to prove the domain's DNS records and the account are actually ready.

Compare Mailgun with other providers

Side-by-side message-field support from the SDK capability matrix, with working code for both adapters:

Frequently asked questions

Does Email SDK support Mailgun?

Yes. Email SDK ships a Mailgun adapter imported from @opencoredev/email-sdk/mailgun. You keep your Mailgun account and credentials; the SDK adds message validation, typed errors, and no-network test adapters around the same send() call used for every other provider.

Which message fields does the Mailgun adapter support?

Mailgun supports every normalized message field: CC recipients, BCC recipients, Reply-To address, Custom headers, Attachments, Tags, Metadata, and Scheduled sending (sendAt).

Can Mailgun schedule email for later with Email SDK?

Yes. Set sendAt on the message and the Mailgun adapter passes the scheduled time to the provider.

Does the Mailgun adapter support idempotent sends?

No. Mailgun has no provider-side idempotency, so a retried send can be delivered twice. Deduplicate in your own queue before retrying.

On this page