Vraag vroegtijdige toegang aan

Vul je voornaam en je zakelijke e-mailadres in. We sturen je een link om je aanvraag voor toegang tot Tajo te bevestigen.

Mailgun-connector

Connectorstatus: Gepland Nog niet gebouwd. Tajo draait deze connector vandaag niet.

Illustratie · voorbeelddata

Voorbeeld van synchronisatie

Eén record controleren

Bron

Mailgun

Connectorstatus: Gepland

Bestemming

Je andere tool

Connectorstatus: Eigen tool

BronveldDoelveldVoorbeeldwaarde
record.id source_id record_1042
record.updated_at updated_at 2026-10-18T08:00:00Z
record.value value sample_value
  1. Opstellen
  2. Eén record controleren
  3. Deze versie goedkeuren

Statussen gelden per connector en garanderen niet dat deze synchronisatie klaar is. De velden zijn illustratief. Controleer het echte schema en de rechten voordat een synchronisatie draait.

Verbind Mailgun met Brevo via Tajo om je transactionele en marketing-e-maildata te verenigen, leverings-events en engagement-metrics te synchroniseren en je e-mailinfrastructuur te consolideren in één klantbeeld.

Overzicht

EigenschapWaarde
PlatformMailgun (by Sinch)
CategorieEmail Marketing
SetupcomplexiteitEenvoudig
Officiële integratieNee
Gesynchroniseerde dataEvents, Contacten, Deliverability, Campagnes
Auth-methodeAPI-sleutel (HTTP Basic Auth)

Functies

  • Leverings-event-sync - Track events voor delivered, bounced, opened en clicked
  • Engagement-metrics - Synchroniseer open- en click-rates naar Brevo-contactattributen
  • Bouncebeheer - Onderdruk gebouncete adressen automatisch in Brevo
  • Klachtafhandeling - Synchroniseer spamklachten voor lijsthygiëne
  • Domeinreputatie - Monitor de gezondheid en deliverability van je senderdomein
  • Transactionele e-mail-tracking - Correleer transactionele sends met marketingdata

Vereisten

Voordat je begint, zorg dat je beschikt over:

  1. Een Mailgun-account met een geverifieerd senderdomein
  2. Een Mailgun API-sleutel uit het Mailgun Dashboard
  3. Een Brevo-account met API-toegang
  4. Een Tajo-account met connector-rechten

Authenticatie

API-sleutel-authenticatie

Mailgun gebruikt HTTP Basic Authentication met api als gebruikersnaam en je API-sleutel als wachtwoord:

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' ...

Typen API-sleutels

Mailgun biedt domeinspecifieke sending keys en account-level API-sleutels. Gebruik domain sending keys voor berichtenoperaties en de account-API-sleutel voor beheeroperaties.

Configuratie

Basisopzet

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

Veldmapping

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

EndpointMethodeBeschrijving
https://api.mailgun.net/v3/{domain}/messagesPOSTE-mailberichten verzenden
https://api.mailgun.net/v3/{domain}/eventsGETEvent-logs opvragen
https://api.mailgun.net/v3/{domain}/bouncesGETBounces opvragen
https://api.mailgun.net/v3/{domain}/complaintsGETKlachten opvragen
https://api.mailgun.net/v3/{domain}/unsubscribesGETUitschrijvingen opvragen
https://api.mailgun.net/v3/{domain}/tagsGETTags opvragen
https://api.mailgun.net/v3/{domain}/tags/{tag}/statsGETTag-statistieken ophalen
https://api.mailgun.net/v3/listsGETMailinglijsten opvragen
https://api.mailgun.net/v3/domainsGETDomeinen opvragen
https://api.mailgun.net/v4/address/validatePOSTE-mailadres valideren

EU-regio

Gebruik voor Mailgun-accounts in de EU https://api.eu.mailgun.net in plaats van https://api.mailgun.net voor alle API-endpoints.

Codevoorbeelden

Connector initialiseren

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'
});

Bericht versturen via de 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.' }

E-mail-events naar Brevo synchroniseren

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

Mailgun-webhooks afhandelen

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');
});

Bounces en klachten synchroniseren

// 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')
});
}

Ratelimits

EndpointLimietOpmerkingen
Messages APIVarieert per plan100/uur (free), onbeperkt (betaald)
Events APIGeen expliciete limietGebruik paginatie met max 300 items
Validation APIOp basis van planPay-per-validation
WebhooksRealtimeGeen ratelimit op levering
Suppressions APIGeen expliciete limietStandaard rate-limiting van toepassing

Verzendlimieten

Mailgun hanteert verzendlimieten op basis van je plan en domeinreputatie. Nieuwe domeinen starten met lagere limieten die toenemen naarmate je sender-reputatie verbetert. Monitor je domeinstatistieken in het Mailgun-dashboard.

Probleemoplossing

ProbleemOorzaakOplossing
401 UnauthorizedOngeldige API-sleutelVerifieer de API-sleutel in het Mailgun-dashboard
Domein niet geverifieerdOntbrekende DNS-recordsVoeg de vereiste TXT-, CNAME- en MX-records toe
Webhook niet ontvangenURL niet bereikbaarZorg dat de webhook-URL publiekelijk bereikbaar is
Events ontbrekenTijdsbereik te smalVerruim begin/end-parameters
Lage deliverabilityDomeinreputatieControleer domeinstats en authenticatie

Debugmodus

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

Best practices

  1. Verifieer senderdomeinen - Rond DNS-verificatie af voor optimale deliverability
  2. Gebruik webhooks voor events - Realtime-webhook-levering in plaats van polling van de Events API
  3. Handel bounces proactief af - Onderdruk hard bounces direct in Brevo
  4. Tag je berichten - Gebruik tags om e-mailprestaties te categoriseren en analyseren
  5. Monitor domeinreputatie - Volg deliverabilitymetrics in het Mailgun-dashboard
  6. Gebruik e-mailvalidatie - Valideer adressen voordat je ze aan Brevo-lijsten toevoegt

Beveiliging

  • HTTP Basic Auth - API-sleutel verzonden via Authorization-header
  • Webhook-signatures - HMAC-SHA256-signatureverificatie
  • Domeinverificatie - SPF, DKIM en DMARC DNS-authenticatie
  • IP-whitelisting - Beschikbaar voor dedicated IP-plannen
  • TLS-encryptie - Alle API-endpoints vereisen HTTPS
  • Sleutelrotatie - Rouleer API-sleutels periodiek via het Mailgun-dashboard

Gerelateerde resources

Vraag vroegtijdige toegang aan

Vul je voornaam en je zakelijke e-mailadres in. We sturen je een link om je aanvraag voor toegang tot Tajo te bevestigen.

AI-assistent

Hallo! Stel me vragen over de documentatie.

Deze pagina als Markdown: mailgun.md

Markdown laden…
Openen in Claude Openen in ChatGPT