Mailgun Connector
Connectorstatus: Planlagt Ikke bygget endnu. Tajo kører ikke denne connector i dag.
Illustration · eksempeldata
Eksempel på synkronisering
Kilde
Mailgun
Connectorstatus: Planlagt
Destination
Dit andet værktøj
Connectorstatus: Eget værktøj
Feltmapping
| Kildefelt | Destinationsfelt | Eksempelværdi |
|---|---|---|
record.id | source_id | record_1042 |
record.updated_at | updated_at | 2026-10-18T08:00:00Z |
record.value | value | sample_value |
- Udkast
- Gennemse én post
- Godkend denne version
Status gælder den enkelte connector og garanterer ikke, at denne synkronisering er klar. Felterne er illustrative. Tjek det faktiske skema og tilladelser før en synkronisering.
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
| Egenskab | Værdi |
|---|---|
| Platform | Mailgun (af Sinch) |
| Kategori | E-mailmarketing |
| Opsætningskompleksitet | Let |
| Officiel integration | Nej |
| Synkroniserede data | Hændelser, kontakter, leveringsevne, kampagner |
| Autentifikationsmetode | API-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:
- En Mailgun-konto med et verificeret afsendelsesdomæne
- En Mailgun API-nøgle fra Mailgun-dashboardet
- En Brevo-konto med API-adgang
- 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:
# Get your API key from https://app.mailgun.com/settings/api_securityexport MAILGUN_API_KEY=key-your-api-keyexport MAILGUN_DOMAIN=your-domain.comexport TAJO_API_KEY=your_tajo_api_keyexport BREVO_API_KEY=your_brevo_api_key// HTTP Basic Auth formatconst 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: 32Feltmapping
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_UNSUBSCRIBEDAPI-endpoints
| Endpoint | Metode | Beskrivelse |
|---|---|---|
https://api.mailgun.net/v3/{domain}/messages | POST | Send e-mailbeskeder |
https://api.mailgun.net/v3/{domain}/events | GET | Forespørg hændelseslogs |
https://api.mailgun.net/v3/{domain}/bounces | GET | Vis bounces |
https://api.mailgun.net/v3/{domain}/complaints | GET | Vis klager |
https://api.mailgun.net/v3/{domain}/unsubscribes | GET | Vis afmeldinger |
https://api.mailgun.net/v3/{domain}/tags | GET | Vis tags |
https://api.mailgun.net/v3/{domain}/tags/{tag}/stats | GET | Hent tag-statistik |
https://api.mailgun.net/v3/lists | GET | Vis mailinglister |
https://api.mailgun.net/v3/domains | GET | Vis domæner |
https://api.mailgun.net/v4/address/validate | POST | Validé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 APIconst formData = new URLSearchParams();formData.append('from', `Your App <noreply@${domain}>`);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 dataconst 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 eventsif (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 hygieneconst 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
| Endpoint | Grænse | Noter |
|---|---|---|
| Messages API | Varierer efter plan | 100/t (gratis), ubegrænset (betalt) |
| Events API | Ingen eksplicit grænse | Brug paginering med maks. 300 elementer |
| Validation API | Baseret på plan | Betaling per validering |
| Webhooks | Realtid | Ingen ratebegrænsning på levering |
| Suppressions API | Ingen eksplicit grænse | Standardratebegræ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 | Årsag | Løsning |
|---|---|---|
| 401 Unauthorized | Ugyldig API-nøgle | Verificér API-nøgle i Mailgun-dashboard |
| Domæne ikke verificeret | Manglende DNS-poster | Tilføj påkrævede TXT-, CNAME-, MX-poster |
| Webhook ikke modtaget | URL ikke tilgængelig | Sørg for, at webhook-URL er offentligt tilgængelig |
| Hændelser mangler | Tidsinterval for smalt | Udvid begin/end-parametre |
| Lav leveringsevne | Domæneomdømme | Tjek domænestatistik og autentifikation |
Fejlfindingstilstand
connectors: mailgun: debug: true log_level: verbose log_webhooks: true log_events: trueBest practices
- Verificér afsendelsesdomæner - Gennemfør DNS-verifikation for optimal leveringsevne
- Brug webhooks til hændelser - Realtids-webhook-levering vs. polling af Events API
- Håndtér bounces proaktivt - Undertryk hard bounces med det samme i Brevo
- Tag dine beskeder - Brug tags til at kategorisere og analysere e-mailperformance
- Overvåg domæneomdømme - Spor leveringsevnemetrikker i Mailgun-dashboardet
- 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