Mailgun-koppling
Kopplingens status: Planerad Inte byggd än. Tajo kör inte den här kopplingen i dag.
Illustration · exempeldata
Exempel på synkronisering
Källa
Mailgun
Kopplingens status: Planerad
Mål
Ditt andra verktyg
Kopplingens status: Eget verktyg
Fältmappning
| Källfält | Målfält | Exempelvärde |
|---|---|---|
record.id | source_id | record_1042 |
record.updated_at | updated_at | 2026-10-18T08:00:00Z |
record.value | value | sample_value |
- Utkast
- Granska en post
- Godkänn den här versionen
Status gäller varje enskild koppling och garanterar inte att den här synkroniseringen är klar. Fälten är illustrativa. Kontrollera det faktiska schemat och behörigheterna innan synkronisering körs.
Anslut Mailgun till Brevo via Tajo för att enhetliga dina transaktions- och marknadsföringsmejldata, synka leveranshändelser och engagemangsmått och konsolidera din e-postinfrastruktur till en enda kundvy.
Översikt
| Egenskap | Värde |
|---|---|
| Plattform | Mailgun (av Sinch) |
| Kategori | E-postmarknadsföring |
| Installationskomplexitet | Enkel |
| Officiell integration | Nej |
| Data som synkas | Händelser, kontakter, leveransbarhet, kampanjer |
| Autentiseringsmetod | API-nyckel (HTTP Basic Auth) |
Funktioner
- Synk av leveranshändelser - Spåra händelser för delivered, bounced, opened och clicked
- Engagemangsmått - Synka öppnings- och klickfrekvenser till Brevo-kontaktattribut
- Bouncehantering - Undertryck automatiskt studsade adresser i Brevo
- Klagomålshantering - Synka spam-klagomål för listhygien
- Domänreputation - Övervaka avsändardomänens hälsa och leveransbarhet
- Spårning av transaktionsmejl - Korrelera transaktionsutskick med marknadsföringsdata
Förutsättningar
Innan du börjar, se till att du har:
- Ett Mailgun-konto med en verifierad avsändardomän
- En Mailgun API-nyckel från Mailgun Dashboard
- Ett Brevo-konto med API-åtkomst
- Ett Tajo-konto med kopplingsbehörigheter
Autentisering
API-nyckelautentisering
Mailgun använder HTTP Basic Authentication med api som användarnamn och din API-nyckel som lösenord:
# 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' ...Typer av API-nycklar
Mailgun tillhandahåller domänspecifika avsändarnycklar och API-nycklar på kontonivå. Använd domänavsändarnycklar för meddelandeoperationer och API-nyckeln på kontonivå för hanteringsoperationer.
Konfiguration
Grundläggande konfiguration
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: 32Fältmappning
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-ändpunkter
| Ändpunkt | Metod | Beskrivning |
|---|---|---|
https://api.mailgun.net/v3/{domain}/messages | POST | Skicka e-postmeddelanden |
https://api.mailgun.net/v3/{domain}/events | GET | Fråga händelseloggar |
https://api.mailgun.net/v3/{domain}/bounces | GET | Lista studsar |
https://api.mailgun.net/v3/{domain}/complaints | GET | Lista klagomål |
https://api.mailgun.net/v3/{domain}/unsubscribes | GET | Lista avprenumerationer |
https://api.mailgun.net/v3/{domain}/tags | GET | Lista taggar |
https://api.mailgun.net/v3/{domain}/tags/{tag}/stats | GET | Hämta taggstatistik |
https://api.mailgun.net/v3/lists | GET | Lista utskickslistor |
https://api.mailgun.net/v3/domains | GET | Lista domäner |
https://api.mailgun.net/v4/address/validate | POST | Validera e-postadress |
EU-region
För EU-baserade Mailgun-konton, använd https://api.eu.mailgun.net istället för https://api.mailgun.net för alla API-ändpunkter.
Kodexempel
Initiera kopplingen
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'});Skicka ett meddelande 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.' }Synka e-posthändelser till 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}Hantera 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');});Synka studsar och klagomål
// 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') });}API-gränser
| Ändpunkt | Gräns | Noteringar |
|---|---|---|
| Messages API | Varierar per plan | 100/h (gratis), obegränsat (betald) |
| Events API | Ingen explicit gräns | Använd paginering med max 300 objekt |
| Validation API | Baserat på plan | Betala per validering |
| Webhooks | Realtid | Ingen rate limit på leverans |
| Suppressions API | Ingen explicit gräns | Standard rate limiting tillämpas |
Utskicksgränser
Mailgun tillämpar utskicksgränser baserat på din plan och domänreputation. Nya domäner börjar med lägre gränser som ökar när din avsändarreputation förbättras. Övervaka din domänstatistik i Mailgun-dashboarden.
Felsökning
| Problem | Orsak | Lösning |
|---|---|---|
| 401 Unauthorized | Ogiltig API-nyckel | Verifiera API-nyckeln i Mailgun-dashboarden |
| Domänen är inte verifierad | DNS-poster saknas | Lägg till nödvändiga TXT-, CNAME- och MX-poster |
| Webhook tas inte emot | URL ej åtkomlig | Säkerställ att webhook-URL:en är publikt nåbar |
| Händelser saknas | Tidsintervallet är för snävt | Utöka parametrarna begin/end |
| Låg leveransbarhet | Domänreputation | Kontrollera domänstatistik och autentisering |
Debug-läge
connectors: mailgun: debug: true log_level: verbose log_webhooks: true log_events: trueBästa praxis
- Verifiera avsändardomäner - Slutför DNS-verifiering för optimal leveransbarhet
- Använd webhooks för händelser - Webhook-leverans i realtid är bättre än att pollla Events API:et
- Hantera studsar proaktivt - Undertryck hårda studsar omedelbart i Brevo
- Tagga dina meddelanden - Använd taggar för att kategorisera och analysera e-postprestanda
- Övervaka domänreputation - Följ leveransmått i Mailgun-dashboarden
- Använd e-postvalidering - Validera adresser innan du lägger till dem i Brevo-listor
Säkerhet
- HTTP Basic Auth - API-nyckel skickas via Authorization-header
- Webhook-signaturer - Verifiering med HMAC-SHA256-signatur
- Domänverifiering - DNS-autentisering med SPF, DKIM och DMARC
- IP-whitelist - Tillgängligt för planer med dedikerad IP
- TLS-kryptering - Alla API-ändpunkter kräver HTTPS
- Nyckelrotation - Rotera API-nycklar regelbundet via Mailgun-dashboarden