Mailgun konektor
Prepoj Mailgun s Brevo cez Tajo na zjednotenie transakčných a marketingových e-mailových dát, synchronizáciu udalostí doručovania a metrík zapojenia a konsolidáciu e-mailovej infraštruktúry do jednotného pohľadu na zákazníka.
Prehľad
| Vlastnosť | Hodnota |
|---|---|
| Platforma | Mailgun (od Sinch) |
| Kategória | E-mailový marketing |
| Zložitosť nastavenia | Ľahké |
| Oficiálna integrácia | Nie |
| Synchronizované dáta | Udalosti, Kontakty, Doručiteľnosť, Kampane |
| Metóda autentifikácie | API kľúč (HTTP Basic Auth) |
Funkcie
- Synchronizácia udalostí doručovania - Sleduj udalosti doručenia, odrazov, otvárania a klikania
- Metriky zapojenia - Synchronizuj miery otvárania a klikania na atribúty kontaktov Brevo
- Správa odrazov - Automaticky potlač adresy s odrazmi v Brevo
- Spracovanie sťažností - Synchronizuj spamové sťažnosti pre hygienu zoznamu
- Reputácia domény - Monitoruj zdravie odosielacej domény a doručiteľnosť
- Sledovanie transakčných e-mailov - Koreluj transakčné odosielania s marketingovými dátami
Predpoklady
Predtým, než začneš, uisti sa, že máš:
- Mailgun účet s overenou odosielacou doménou
- Mailgun API kľúč z Mailgun Dashboard
- Brevo účet s API prístupom
- Tajo účet s oprávneniami konektora
Autentifikácia
Autentifikácia API kľúčom
Mailgun používa HTTP Basic Authentication s api ako používateľským menom a tvojím API kľúčom ako heslom:
# 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' ...Typy API kľúčov
Mailgun poskytuje kľúče špecifické pre doménu na odosielanie a API kľúče na úrovni účtu. Použi kľúče na odosielanie domény pre operácie so správami a kľúč API účtu pre správcovské operácie.
Konfigurácia
Základné nastavenie
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: 32Mapovanie polí
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 endpointy
| Endpoint | Metóda | Popis |
|---|---|---|
https://api.mailgun.net/v3/{domain}/messages | POST | Odoslanie e-mailových správ |
https://api.mailgun.net/v3/{domain}/events | GET | Dopyt na záznamy udalostí |
https://api.mailgun.net/v3/{domain}/bounces | GET | Zoznam odrazov |
https://api.mailgun.net/v3/{domain}/complaints | GET | Zoznam sťažností |
https://api.mailgun.net/v3/{domain}/unsubscribes | GET | Zoznam odhlásení |
https://api.mailgun.net/v3/{domain}/tags | GET | Zoznam tagov |
https://api.mailgun.net/v3/{domain}/tags/{tag}/stats | GET | Štatistiky tagu |
https://api.mailgun.net/v3/lists | GET | Zoznam poštových zoznamov |
https://api.mailgun.net/v3/domains | GET | Zoznam domén |
https://api.mailgun.net/v4/address/validate | POST | Overenie e-mailovej adresy |
EU región
Pre účty Mailgun v EÚ použi https://api.eu.mailgun.net namiesto https://api.mailgun.net pre všetky API endpointy.
Ukážky kódu
Inicializácia konektora
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'});Odoslanie správy cez 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.' }Synchronizácia e-mailových udalostí do 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}Spracovanie webhookov Mailgun
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');});Synchronizácia odrazov a sťažností
// 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') });}Obmedzenia rýchlosti
| Endpoint | Limit | Poznámky |
|---|---|---|
| Messages API | Závisí od plánu | 100/hod (free), neobmedzené (platené) |
| Events API | Bez explicitného limitu | Použi stránkovanie s max 300 položkami |
| Validation API | Podľa plánu | Platba za overenie |
| Webhooky | V reálnom čase | Bez limitu rýchlosti pri doručovaní |
| Suppressions API | Bez explicitného limitu | Platí štandardné obmedzenie rýchlosti |
Limity odosielania
Mailgun presadzuje limity odosielania podľa tvojho plánu a reputácie domény. Nové domény začínajú s nižšími limitmi, ktoré sa zvyšujú s rastom reputácie odosielateľa. Monitoruj štatistiky domény v Mailgun dashboarde.
Riešenie problémov
| Problém | Príčina | Riešenie |
|---|---|---|
| 401 Unauthorized | Neplatný API kľúč | Overte API kľúč v Mailgun dashboarde |
| Doména nie je overená | Chýbajú DNS záznamy | Pridaj požadované TXT, CNAME, MX záznamy |
| Webhook nebol prijatý | URL nie je dostupná | Uisti sa, že URL webhooku je verejne dostupná |
| Chýbajúce udalosti | Príliš úzky časový rozsah | Rozšír parametre begin/end |
| Nízka doručiteľnosť | Reputácia domény | Skontroluj štatistiky domény a autentifikáciu |
Debug režim
connectors: mailgun: debug: true log_level: verbose log_webhooks: true log_events: trueOdporúčané postupy
- Overuj odosielacie domény - Dokončí overenie DNS pre optimálnu doručiteľnosť
- Použi webhooky pre udalosti - Doručenie webhookov v reálnom čase oproti pollingu Events API
- Proaktívne spravuj odrazy - Okamžite potlač pevné odrazy v Brevo
- Taguj správy - Použi tagy na kategorizáciu a analýzu výkonu e-mailov
- Monitoruj reputáciu domény - Sleduj metriky doručiteľnosti v Mailgun dashboarde
- Použi overenie e-mailov - Overuj adresy pred pridaním do zoznamov Brevo
Bezpečnosť
- HTTP Basic Auth - API kľúč prenášaný cez hlavičku Authorization
- Podpisy webhookov - Overenie podpisov HMAC-SHA256
- Overenie domény - DNS autentifikácia SPF, DKIM a DMARC
- Whitelistovanie IP - Dostupné pre plány s dedikovanou IP
- TLS šifrovanie - Všetky API endpointy vyžadujú HTTPS
- Rotácia kľúčov - Rotuj API kľúče pravidelne cez Mailgun dashboard