Mailgun-kobling

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

EgenskapVerdi
PlattformMailgun (fra Sinch)
KategoriE-postmarkedsføring
OppsettskompleksitetEnkel
Offisiell integrasjonNei
Synkroniserte dataHendelser, kontakter, leveringskvalitet, kampanjer
AutentiseringsmetodeAPI-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
  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:

Terminal window
# 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
// 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

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

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

EndepunktMetodeBeskrivelse
https://api.mailgun.net/v3/{domain}/messagesPOSTSend e-postmeldinger
https://api.mailgun.net/v3/{domain}/eventsGETSpør hendelseslogger
https://api.mailgun.net/v3/{domain}/bouncesGETList returer
https://api.mailgun.net/v3/{domain}/complaintsGETList klager
https://api.mailgun.net/v3/{domain}/unsubscribesGETList avmeldinger
https://api.mailgun.net/v3/{domain}/tagsGETList tagger
https://api.mailgun.net/v3/{domain}/tags/{tag}/statsGETHent tagg-statistikk
https://api.mailgun.net/v3/listsGETList sendelister
https://api.mailgun.net/v3/domainsGETList domener
https://api.mailgun.net/v4/address/validatePOSTValider 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

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

// Send en e-post med Mailguns Messages API
const formData = new URLSearchParams();
formData.append('from', `Your App <noreply@${domain}>`);
formData.append('to', '[email protected]');
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: '<[email protected]>', message: 'Queued. Thank you.' }

Synkroniser e-posthendelser til Brevo

// 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

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

// 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

EndepunktGrenseMerknader
Messages APIVarierer etter plan100/time (gratis), ubegrenset (betalt)
Events APIIngen eksplisitt grenseBruk paginering med maks 300 elementer
Validation APIBasert på planBetaling per validering
WebhooksSanntidIngen ratebegrensning på levering
Suppressions APIIngen eksplisitt grenseStandard 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ÅrsakLøsning
401 UnauthorizedUgyldig API-nøkkelVerifiser API-nøkkelen i Mailgun-dashbordet
Domene ikke verifisertDNS-poster manglerLegg til nødvendige TXT-, CNAME-, MX-poster
Webhook ikke mottattURL ikke tilgjengeligSørg for at webhook-URL er offentlig tilgjengelig
Manglende hendelserTidsintervall for smaltUtvid begin-/end-parameterne
Lav leveringskvalitetDomenerenomméSjekk domenestatistikk og autentisering

Feilsøkingsmodus

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

Subscribe to updates

developer-docs

Drop your email or phone number — we'll send you what matters next.

auto-detect
AI-assistent

Hei! Spør meg om dokumentasjonen.