---
title: Mailgun
description: Send email through the Mailgun Messages API.
icon: Truck
source: "src/transports/mailgun.ts"
---

Send email through the Mailgun Messages API.

<Callout title="The one rule">Create this transport under the matching sently channel sender.</Callout>

## Configuration

| Option | Type | Default or requirement |
| --- | --- | --- |
| `apiKey` | `string` | required |
| `domain` | `string` | required |
| `region` | `"us" | "eu"` | "us" |

<Steps>
  <Step title="Configure the transport">

```ts
import { createMailer } from "sently/mailer";
import { MailgunTransport } from "sently/transports/mailgun";

const sender = createMailer({ transport: new MailgunTransport({ apiKey: process.env.MAILGUN_API_KEY!, domain: "mg.example.com" }) });
```

  </Step>
  <Step title="Send with the channel API">

```ts
await sender.send({ from: "hello@example.com", to: "person@example.com", subject: "Hello", text: "Hi" });
```

  </Step>
</Steps>

<Accordions><Accordion title="Should I call the provider SDK?">No. Use the sently sender; provider-specific extras stay on the transport instance.</Accordion></Accordions>

<Cards><Card title="Email channel" href="/docs/channels/email" /></Cards>
