Mailgun konnektor
Csatlakoztasd a Mailgunt a Brevóhoz a Tajo segítségével a tranzakciós és marketing e-mail adatok egységesítéséhez, a kézbesítési események és elköteleződési mutatók szinkronizálásához, valamint az e-mail infrastruktúra konszolidálásához egyetlen ügyfélnézetbe.
Áttekintés
| Tulajdonság | Érték |
|---|---|
| Platform | Mailgun (Sinch által) |
| Kategória | E-mail marketing |
| Telepítés bonyolultsága | Könnyű |
| Hivatalos integráció | Nem |
| Szinkronizált adatok | Események, Kapcsolatok, Kézbesíthetőség, Kampányok |
| Hitelesítési módszer | API kulcs (HTTP Basic Auth) |
Funkciók
- Kézbesítési esemény szinkronizáció – Kézbesített, visszapattant, megnyitott és kattintott események követése
- Elköteleződési mutatók – Megnyitási és kattintási arányok szinkronizálása Brevo kapcsolat-attribútumokba
- Visszapattanás-kezelés – Visszapattant e-mail címek automatikus letiltása a Brevóban
- Panaszkezelés – Spam panaszok szinkronizálása lista-higiéniához
- Domain reputáció – A küldő domain állapotának és kézbesíthetőségének figyelése
- Tranzakciós e-mail követés – Tranzakciós küldések korrelálása marketing adatokkal
Előfeltételek
Mielőtt elkezdenéd, győződj meg róla, hogy rendelkezel:
- Egy Mailgun fiókkal ellenőrzött küldő domainnel
- Egy Mailgun API kulccsal a Mailgun Dashboardból
- Egy Brevo fiókkal API-hozzáféréssel
- Egy Tajo fiókkal konnektor jogosultságokkal
Hitelesítés
API kulcs hitelesítés
A Mailgun HTTP Basic Authentication-t használ api felhasználónévként és az API kulcsodat jelszóként:
# 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 kulcstípusok
A Mailgun domain-specifikus küldési kulcsokat és fiókszintű API kulcsokat biztosít. Domain-küldési kulcsokat használj üzenetküldési műveletekhez, fiókszintű API kulcsot a kezelési műveletekhez.
Konfiguráció
Alapbeállítás
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: 32Mezőleképezés
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 végpontok
| Végpont | Módszer | Leírás |
|---|---|---|
https://api.mailgun.net/v3/{domain}/messages | POST | E-mail üzenetek küldése |
https://api.mailgun.net/v3/{domain}/events | GET | Eseménynaplók lekérdezése |
https://api.mailgun.net/v3/{domain}/bounces | GET | Visszapattanások listázása |
https://api.mailgun.net/v3/{domain}/complaints | GET | Panaszok listázása |
https://api.mailgun.net/v3/{domain}/unsubscribes | GET | Leiratkozások listázása |
https://api.mailgun.net/v3/{domain}/tags | GET | Címkék listázása |
https://api.mailgun.net/v3/{domain}/tags/{tag}/stats | GET | Címke-statisztikák lekérése |
https://api.mailgun.net/v3/lists | GET | Levelezőlisták listázása |
https://api.mailgun.net/v3/domains | GET | Domainek listázása |
https://api.mailgun.net/v4/address/validate | POST | E-mail cím validálása |
EU régió
EU alapú Mailgun fiókoknál használd a https://api.eu.mailgun.net címet a https://api.mailgun.net helyett az összes API végponthoz.
Kódpéldák
A konnektor inicializálása
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'});Üzenet küldése a Mailgun API-n keresztül
// 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.' }E-mail események szinkronizálása a Brevóba
// 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}Mailgun webhookok kezelése
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');});Visszapattanások és panaszok szinkronizálása
// 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') });}Ráta-korlátok
| Végpont | Korlát | Megjegyzések |
|---|---|---|
| Messages API | Csomagonként változó | 100/óra (ingyenes), korlátlan (fizetős) |
| Events API | Nincs explicit korlát | Lapozás, max. 300 elem |
| Validation API | Csomag alapján | Validációnkénti díjszabás |
| Webhookok | Valós idejű | Nincs kézbesítési ráta-korlát |
| Suppressions API | Nincs explicit korlát | Standard ráta-korlátozás érvényes |
Küldési korlátok
A Mailgun küldési korlátokat alkalmaz a csomag és a domain reputáció alapján. Az új domainek alacsonyabb korlátokkal kezdenek, amelyek a küldői reputáció javulásával növekednek. Figyeld a domain statisztikákat a Mailgun dashboardon.
Hibaelhárítás
| Probléma | Ok | Megoldás |
|---|---|---|
| 401 Unauthorized | Érvénytelen API kulcs | Ellenőrizd az API kulcsot a Mailgun dashboardon |
| Domain nincs ellenőrizve | Hiányzó DNS bejegyzések | Adj hozzá szükséges TXT, CNAME, MX bejegyzéseket |
| Webhook nem érkezett | URL nem elérhető | Győződj meg róla, hogy a webhook URL nyilvánosan elérhető |
| Hiányzó események | Túl szűk időtartomány | Bővítsd a begin/end paramétereket |
| Alacsony kézbesíthetőség | Domain reputáció | Ellenőrizd a domain statisztikákat és hitelesítést |
Hibakeresési mód
connectors: mailgun: debug: true log_level: verbose log_webhooks: true log_events: trueLegjobb gyakorlatok
- Ellenőrizd a küldő domaineket – Végezd el a DNS ellenőrzést az optimális kézbesíthetőségért
- Használj webhookokat eseményekhez – Valós idejű webhook kézbesítés az Events API lekérdezése helyett
- Kezelj proaktívan visszapattanásokat – Tiltsd le azonnal a kemény visszapattanásokat a Brevóban
- Jelöld meg az üzeneteket – Használj címkéket az e-mail teljesítmény kategorizálásához és elemzéséhez
- Figyeld a domain reputációt – Kövesd a kézbesíthetőségi mutatókat a Mailgun dashboardon
- Használj e-mail validálást – Validáld a címeket, mielőtt Brevo listákhoz adod őket
Biztonság
- HTTP Basic Auth – API kulcs Authorization fejlécon keresztül átadva
- Webhook aláírások – HMAC-SHA256 aláírás-ellenőrzés
- Domain ellenőrzés – SPF, DKIM és DMARC DNS hitelesítés
- IP engedélyezési lista – Dedikált IP csomagoknál elérhető
- TLS titkosítás – Minden API végpont HTTPS-t igényel
- Kulcs rotáció – Forgasd rendszeresen az API kulcsokat a Mailgun dashboardon