Mailgun Connector

Forbind Mailgun til Brevo via Tajo for at forene dine transaktionelle og marketing-e-maildata, synkronisere leveringshændelser og engagementmetrikker og konsolidere din e-mailinfrastruktur til én kundevisning.

Oversigt

EgenskabVærdi
PlatformMailgun (af Sinch)
KategoriE-mailmarketing
OpsætningskompleksitetLet
Officiel integrationNej
Synkroniserede dataHændelser, kontakter, leveringsevne, kampagner
AutentifikationsmetodeAPI-nøgle (HTTP Basic Auth)

Funktioner

  • Synkronisering af leveringshændelser - Spor leverede, afviste, åbnede og klikkede hændelser
  • Engagementmetrikker - Synkronisér åbnings- og klikrater til Brevo-kontaktattributter
  • Bounce-håndtering - Undertryk automatisk afviste adresser i Brevo
  • Klagehåndtering - Synkronisér spamklager til listehygiejne
  • Domæneomdømme - Overvåg afsendelsesdomænets sundhed og leveringsevne
  • Transaktionel e-mailsporing - Korrelér transaktionelle afsendelser med marketingdata

Forudsætninger

Før du begynder, skal du sikre dig, at du har:

  1. En Mailgun-konto med et verificeret afsendelsesdomæne
  2. En Mailgun API-nøgle fra Mailgun-dashboardet
  3. En Brevo-konto med API-adgang
  4. En Tajo-konto med konnektorrettigheder

Autentifikation

API-nøgle-autentifikation

Mailgun bruger HTTP Basic-autentifikation med api som brugernavn og din API-nøgle som adgangskode:

Terminal window
# Get your API key from 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')}`
};
// Or using curl
// curl -s --user 'api:YOUR_API_KEY' ...

API-nøgletyper

Mailgun leverer domænespecifikke afsendelsesnøgler og API-nøgler på kontoniveau. Brug domæne-afsendelsesnøgler til beskedoperationer og kontoens API-nøgle til administrative operationer.

Konfiguration

Grundlæggende opsætning

connectors:
mailgun:
enabled: true
api_key: "${MAILGUN_API_KEY}"
domain: "${MAILGUN_DOMAIN}"
region: "us" # or "eu" for EU region
sync:
events: true
contacts: true
bounces: true
complaints: true
schedule: "*/15 * * * *" # Every 15 minutes
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-endpoints

EndpointMetodeBeskrivelse
https://api.mailgun.net/v3/{domain}/messagesPOSTSend e-mailbeskeder
https://api.mailgun.net/v3/{domain}/eventsGETForespørg hændelseslogs
https://api.mailgun.net/v3/{domain}/bouncesGETVis bounces
https://api.mailgun.net/v3/{domain}/complaintsGETVis klager
https://api.mailgun.net/v3/{domain}/unsubscribesGETVis afmeldinger
https://api.mailgun.net/v3/{domain}/tagsGETVis tags
https://api.mailgun.net/v3/{domain}/tags/{tag}/statsGETHent tag-statistik
https://api.mailgun.net/v3/listsGETVis mailinglister
https://api.mailgun.net/v3/domainsGETVis domæner
https://api.mailgun.net/v4/address/validatePOSTValidér e-mailadresse

EU-region

For EU-baserede Mailgun-konti skal du bruge https://api.eu.mailgun.net i stedet for https://api.mailgun.net til alle API-endpoints.

Kodeeksempler

Initialisér konnektor

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 besked via Mailgun API

// Send an email using Mailgun's 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.' }

Synkronisér e-mailhændelser til Brevo

// Query Mailgun events and sync engagement data
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;
}
}
// Follow pagination for more events
if (paging.next) {
// Fetch next page using paging.next URL
}

Håndtér Mailgun-webhooks

const crypto = require('crypto');
app.post('/webhooks/mailgun', async (req, res) => {
// Verify webhook signature
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
});
// Handle bounce suppression
if (event === 'failed' && eventData.severity === 'permanent') {
await tajo.contacts.update(email, {
attributes: { MG_BOUNCE_TYPE: 'hard_bounce' },
emailBlacklisted: true
});
}
res.status(200).send('OK');
});

Synkronisér bounces og klager

// Sync bounced addresses for list hygiene
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')
});
}

Ratebegrænsninger

EndpointGrænseNoter
Messages APIVarierer efter plan100/t (gratis), ubegrænset (betalt)
Events APIIngen eksplicit grænseBrug paginering med maks. 300 elementer
Validation APIBaseret på planBetaling per validering
WebhooksRealtidIngen ratebegrænsning på levering
Suppressions APIIngen eksplicit grænseStandardratebegrænsning gælder

Afsendelsesgrænser

Mailgun håndhæver afsendelsesgrænser baseret på din plan og domæneomdømme. Nye domæner starter med lavere grænser, der stiger, efterhånden som dit afsenderomdømme forbedres. Overvåg din domænestatistik i Mailgun-dashboardet.

Fejlfinding

ProblemÅrsagLøsning
401 UnauthorizedUgyldig API-nøgleVerificér API-nøgle i Mailgun-dashboard
Domæne ikke verificeretManglende DNS-posterTilføj påkrævede TXT-, CNAME-, MX-poster
Webhook ikke modtagetURL ikke tilgængeligSørg for, at webhook-URL er offentligt tilgængelig
Hændelser manglerTidsinterval for smaltUdvid begin/end-parametre
Lav leveringsevneDomæneomdømmeTjek domænestatistik og autentifikation

Fejlfindingstilstand

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

Best practices

  1. Verificér afsendelsesdomæner - Gennemfør DNS-verifikation for optimal leveringsevne
  2. Brug webhooks til hændelser - Realtids-webhook-levering vs. polling af Events API
  3. Håndtér bounces proaktivt - Undertryk hard bounces med det samme i Brevo
  4. Tag dine beskeder - Brug tags til at kategorisere og analysere e-mailperformance
  5. Overvåg domæneomdømme - Spor leveringsevnemetrikker i Mailgun-dashboardet
  6. Brug e-mailvalidering - Validér adresser, før de tilføjes til Brevo-lister

Sikkerhed

  • HTTP Basic Auth - API-nøgle transmitteres via Authorization-header
  • Webhook-signaturer - HMAC-SHA256-signaturverifikation
  • Domæneverifikation - SPF-, DKIM- og DMARC-DNS-autentifikation
  • IP-whitelisting - Tilgængelig til dedikerede IP-planer
  • TLS-kryptering - Alle API-endpoints kræver HTTPS
  • Nøglerotation - Rotér API-nøgler regelmæssigt via Mailgun-dashboardet

Relaterede ressourcer

Subscribe to updates

developer-docs

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

auto-detect
AI-assistent

Hej! Spørg mig om dokumentationen.