---
title: "Mailgun-kobling"
description: "Fullstendig Mailgun-integrasjonsveiledning for synkronisering av e-postleveringsdata, engasjementsmålinger og transaksjonelle e-posthendelser med Brevo gjennom Tajo."
url: https://tajo.io/no/docs/connectors/marketing/mailgun/
markdown: https://tajo.io/no/docs/connectors/marketing/mailgun.md
lang: no-NO
robots: noindex
---

Be om tidlig tilgang

Skriv inn fornavn og e-postadresse på jobb. Vi sender deg en lenke for å bekrefte forespørselen om tilgang til Tajo.

# Mailgun-kobling

Koblingsstatus: Planlagt Ikke bygget ennå. Tajo kjører ikke denne koblingen i dag.

| Kildefelt | Målfelt | Eksempelverdi |
| --- | --- | --- |
| `record.id` | `source_id` | `record_1042` |
| `record.updated_at` | `updated_at` | `2026-10-18T08:00:00Z` |
| `record.value` | `value` | `sample_value` |

Koble Mailgun til Brevo gjennom Tajo for å forene transaksjonelle og markedsføringsrelaterte e-postdata, synkronisere leveranshendelser og engasjementsmålinger og konsolidere e-postinfrastrukturen din til ett enkelt kundebilde.

## Oversikt

| Egenskap | Verdi |
| --- | --- |
| **Plattform** | Mailgun (fra Sinch) |
| **Kategori** | E-postmarkedsføring |
| **Oppsettskompleksitet** | Enkel |
| **Offisiell integrasjon** | Nei |
| **Synkroniserte data** | Hendelser, kontakter, leveringskvalitet, kampanjer |
| **Autentiseringsmetode** | API-nøkkel (HTTP Basic Auth) |

## Funksjoner

- **Synkronisering av leveranshendelser** - Spor levert, returnert, åpnet og klikket-hendelser
- **Engasjementsmålinger** - Synkroniser åpnings- og klikkrater til Brevo-kontaktattributter
- **Returhåndtering** - Undertrykk returnerte adresser i Brevo automatisk
- **Klagehåndtering** - Synkroniser spamklager for listehygiene
- **Domenerenommé** - Overvåk sendedomenets helse og leveringskvalitet
- **Sporing av transaksjonell e-post** - Korreler transaksjonelle sendinger med markedsføringsdata

## Forutsetninger

Før du begynner, sørg for at du har:

1. En Mailgun-konto med et verifisert sendedomene
2. En Mailgun API-nøkkel fra [Mailgun-dashbordet](https://app.mailgun.com/settings/api_security)
3. En Brevo-konto med API-tilgang
4. En Tajo-konto med konnektor-rettigheter

## Autentisering

### API-nøkkelautentisering

Mailgun bruker HTTP Basic Authentication med `api` som brukernavn og API-nøkkelen din som passord:

```bash
# Hent API-nøkkelen din fra https://app.mailgun.com/settings/api_security
export MAILGUN_API_KEY=key-your-api-key
export MAILGUN_DOMAIN=your-domain.com
export TAJO_API_KEY=your_tajo_api_key
export BREVO_API_KEY=your_brevo_api_key
```

```javascript
// HTTP Basic Auth-format
const headers = {
  'Authorization': `Basic ${Buffer.from(
    `api:${process.env.MAILGUN_API_KEY}`
  ).toString('base64')}`
};

// Eller med curl
// curl -s --user 'api:YOUR_API_KEY' ...
```

API-nøkkeltyper

Mailgun tilbyr domenespesifikke sendenøkler og API-nøkler på kontonivå. Bruk domene-sendenøkler for meldingsoperasjoner og konto-API-nøkkelen for administrasjonsoperasjoner.

## Konfigurasjon

### Grunnleggende oppsett

```yaml
connectors:
  mailgun:
    enabled: true
    api_key: "${MAILGUN_API_KEY}"
    domain: "${MAILGUN_DOMAIN}"
    region: "us"  # eller "eu" for EU-region

    sync:
      events: true
      contacts: true
      bounces: true
      complaints: true
      schedule: "*/15 * * * *"  # Hvert 15. minutt

    webhook:
      signing_key: "${MAILGUN_WEBHOOK_SIGNING_KEY}"

    lists:
      engaged: 30
      bounced: 31
      complained: 32
```

### Feltmapping

```yaml
field_mapping:
  email: email
  first_name: FIRSTNAME
  last_name: LASTNAME
  open_rate: MG_OPEN_RATE
  click_rate: MG_CLICK_RATE
  last_delivered: MG_LAST_DELIVERED
  bounce_type: MG_BOUNCE_TYPE
  engagement_score: MG_ENGAGEMENT
  unsubscribed: MG_UNSUBSCRIBED
```

## API-endepunkter

| Endepunkt | Metode | Beskrivelse |
| --- | --- | --- |
| `https://api.mailgun.net/v3/{domain}/messages` | POST | Send e-postmeldinger |
| `https://api.mailgun.net/v3/{domain}/events` | GET | Spør hendelseslogger |
| `https://api.mailgun.net/v3/{domain}/bounces` | GET | List returer |
| `https://api.mailgun.net/v3/{domain}/complaints` | GET | List klager |
| `https://api.mailgun.net/v3/{domain}/unsubscribes` | GET | List avmeldinger |
| `https://api.mailgun.net/v3/{domain}/tags` | GET | List tagger |
| `https://api.mailgun.net/v3/{domain}/tags/{tag}/stats` | GET | Hent tagg-statistikk |
| `https://api.mailgun.net/v3/lists` | GET | List sendelister |
| `https://api.mailgun.net/v3/domains` | GET | List domener |
| `https://api.mailgun.net/v4/address/validate` | POST | Valider e-postadresse |

EU-region

For EU-baserte Mailgun-kontoer, bruk `https://api.eu.mailgun.net` i stedet for `https://api.mailgun.net` for alle API-endepunkter.

## Kodeeksempler

### Initialiser kobling

```javascript
import { TajoClient } from '@tajo/sdk';

const tajo = new TajoClient({
  apiKey: process.env.TAJO_API_KEY,
  brevoApiKey: process.env.BREVO_API_KEY
});

await tajo.connectors.connect('mailgun', {
  apiKey: process.env.MAILGUN_API_KEY,
  domain: process.env.MAILGUN_DOMAIN,
  region: 'us'
});
```

### Send en melding via Mailgun API

```javascript
// Send en e-post med Mailguns Messages API
const formData = new URLSearchParams();
formData.append('from', `Your App <noreply@${domain}>`);
formData.append('to', 'recipient@example.com');
formData.append('subject', 'Welcome to our platform');
formData.append('html', '<h1>Welcome!</h1><p>Thanks for signing up.</p>');
formData.append('o:tag', 'welcome-email');
formData.append('o:tracking', 'yes');

const response = await fetch(
  `https://api.mailgun.net/v3/${domain}/messages`,
  {
    method: 'POST',
    headers: {
      'Authorization': `Basic ${Buffer.from(`api:${apiKey}`).toString('base64')}`
    },
    body: formData
  }
);

const result = await response.json();
// { id: '<message-id@domain.com>', message: 'Queued. Thank you.' }
```

### Synkroniser e-posthendelser til Brevo

```javascript
// Spør Mailgun-hendelser og synkroniser engasjementsdata
const eventsResponse = await fetch(
  `https://api.mailgun.net/v3/${domain}/events?` +
    new URLSearchParams({
      begin: lastSyncDate,
      ascending: 'yes',
      limit: 300,
      event: 'delivered OR opened OR clicked'
    }),
  {
    headers: {
      'Authorization': `Basic ${Buffer.from(`api:${apiKey}`).toString('base64')}`
    }
  }
);

const { items, paging } = await eventsResponse.json();

for (const event of items) {
  const email = event.recipient;

  switch (event.event) {
    case 'delivered':
      await tajo.contacts.update(email, {
        attributes: { MG_LAST_DELIVERED: event.timestamp }
      });
      break;
    case 'opened':
      await tajo.events.track({
        email,
        event: 'email_opened',
        properties: { subject: event.message.headers.subject }
      });
      break;
    case 'clicked':
      await tajo.events.track({
        email,
        event: 'email_clicked',
        properties: { url: event.url }
      });
      break;
  }
}

// Følg paginering for flere hendelser
if (paging.next) {
  // Hent neste side med paging.next-URL
}
```

### Håndter Mailgun-webhooks

```javascript
const crypto = require('crypto');

app.post('/webhooks/mailgun', async (req, res) => {
  // Verifiser webhook-signatur
  const { timestamp, token, signature } = req.body.signature;
  const encodedToken = crypto
    .createHmac('sha256', process.env.MAILGUN_WEBHOOK_SIGNING_KEY)
    .update(timestamp.concat(token))
    .digest('hex');

  if (encodedToken !== signature) {
    return res.status(401).send('Unauthorized');
  }

  const eventData = req.body['event-data'];
  const event = eventData.event;
  const email = eventData.recipient;

  await tajo.connectors.handleWebhook('mailgun', {
    topic: event,
    payload: eventData
  });

  // Håndter returundertrykking
  if (event === 'failed' && eventData.severity === 'permanent') {
    await tajo.contacts.update(email, {
      attributes: { MG_BOUNCE_TYPE: 'hard_bounce' },
      emailBlacklisted: true
    });
  }

  res.status(200).send('OK');
});
```

### Synkroniser returer og klager

```javascript
// Synkroniser returnerte adresser for listehygiene
const bouncesResponse = await fetch(
  `https://api.mailgun.net/v3/${domain}/bounces?limit=100`,
  {
    headers: {
      'Authorization': `Basic ${Buffer.from(`api:${apiKey}`).toString('base64')}`
    }
  }
);

const { items: bounces } = await bouncesResponse.json();

for (const bounce of bounces) {
  await tajo.contacts.update(bounce.address, {
    attributes: {
      MG_BOUNCE_TYPE: bounce.error.includes('550') ? 'hard_bounce' : 'soft_bounce',
      MG_BOUNCE_DATE: bounce.created_at
    },
    emailBlacklisted: bounce.error.includes('550')
  });
}
```

## Ratebegrensninger

| Endepunkt | Grense | Merknader |
| --- | --- | --- |
| Messages API | Varierer etter plan | 100/time (gratis), ubegrenset (betalt) |
| Events API | Ingen eksplisitt grense | Bruk paginering med maks 300 elementer |
| Validation API | Basert på plan | Betaling per validering |
| Webhooks | Sanntid | Ingen ratebegrensning på levering |
| Suppressions API | Ingen eksplisitt grense | Standard ratebegrensning gjelder |

Sendegrenser

Mailgun håndhever sendegrenser basert på planen din og domenerenommé. Nye domener starter med lavere grenser som øker når senderens omdømme forbedres. Overvåk domenestatistikken i Mailgun-dashbordet.

## Feilsøking

| Problem | Årsak | Løsning |
| --- | --- | --- |
| 401 Unauthorized | Ugyldig API-nøkkel | Verifiser API-nøkkelen i Mailgun-dashbordet |
| Domene ikke verifisert | DNS-poster mangler | Legg til nødvendige TXT-, CNAME-, MX-poster |
| Webhook ikke mottatt | URL ikke tilgjengelig | Sørg for at webhook-URL er offentlig tilgjengelig |
| Manglende hendelser | Tidsintervall for smalt | Utvid `begin`-/`end`-parameterne |
| Lav leveringskvalitet | Domenerenommé | Sjekk domenestatistikk og autentisering |

### Feilsøkingsmodus

```yaml
connectors:
  mailgun:
    debug: true
    log_level: verbose
    log_webhooks: true
    log_events: true
```

## Beste praksis

1. **Verifiser sendedomener** - Fullfør DNS-verifisering for optimal leveringskvalitet
2. **Bruk webhooks for hendelser** - Sanntids webhook-levering fremfor polling av Events API
3. **Håndter returer proaktivt** - Undertrykk harde returer umiddelbart i Brevo
4. **Tagg meldingene dine** - Bruk tagger for å kategorisere og analysere e-postytelse
5. **Overvåk domenerenommé** - Spor leveringskvalitetsmetrikker i Mailgun-dashbordet
6. **Bruk e-postvalidering** - Valider adresser før de legges til i Brevo-lister

## Sikkerhet

- **HTTP Basic Auth** - API-nøkkel overføres via Authorization-header
- **Webhook-signaturer** - HMAC-SHA256-signaturverifisering
- **Domeneverifisering** - SPF-, DKIM- og DMARC-DNS-autentisering
- **IP-hviteliste** - Tilgjengelig for dedikerte IP-planer
- **TLS-kryptering** - Alle API-endepunkter krever HTTPS
- **Nøkkelrotasjon** - Roter API-nøkler regelmessig via Mailgun-dashbordet

## Relaterte ressurser

- [Brevo-kobling](https://tajo.io/no/docs/connectors/marketing/brevo)
- [Segment-kobling](https://tajo.io/no/docs/connectors/custom/segment)
- [Customer Sync-ferdighet](https://tajo.io/no/docs/skills/data-sync/customer-sync)
- [Mailgun API-dokumentasjon](https://documentation.mailgun.com/)
