Mailgun Konektor
Povežite Mailgun s Brevom putem Taja kako biste ujedinili vaše transakcijske i marketinške e-mail podatke, sinkronizirali događaje dostave i metrike angažmana te konsolidirali vašu e-mail infrastrukturu u jedinstven pogled na korisnika.
Pregled
| Svojstvo | Vrijednost |
|---|---|
| Platforma | Mailgun (by Sinch) |
| Kategorija | E-mail marketing |
| Složenost postavljanja | Jednostavno |
| Službena integracija | Ne |
| Sinkronizirani podaci | Događaji, Kontakti, Isporučivost, Kampanje |
| Metoda autentifikacije | API ključ (HTTP Basic Auth) |
Značajke
- Sinkronizacija događaja dostave - Praćenje dostavljenih, vraćenih, otvorenih i kliknutih događaja
- Metrike angažmana - Sinkronizacija stopa otvaranja i klikanja na Brevo atribute kontakata
- Upravljanje vraćenim porukama - Automatska supresija vraćenih adresa u Brevo
- Rukovanje pritužbama - Sinkronizacija pritužbi na spam za higijenu popisa
- Reputacija domene - Praćenje zdravlja domene pošiljanja i isporučivosti
- Praćenje transakcijskih e-mailova - Korelacija transakcijskih slanja s marketinškim podacima
Preduvjeti
Prije nego što počnete, osigurajte da imate:
- Mailgun račun s verificiranom domenom pošiljanja
- Mailgun API ključ iz Mailgun Dashboard-a
- Brevo račun s API pristupom
- Tajo račun s dozvolama konektora
Autentifikacija
Autentifikacija API ključem
Mailgun koristi HTTP Basic autentifikaciju s api kao korisničkim imenom i vašim API ključem kao lozinkom:
# Dohvatite vaš API ključ na 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// Format HTTP Basic Authconst headers = { 'Authorization': `Basic ${Buffer.from( `api:${process.env.MAILGUN_API_KEY}` ).toString('base64')}`};
// Ili koristeći curl// curl -s --user 'api:YOUR_API_KEY' ...Vrste API ključeva
Mailgun pruža ključeve za slanje specifične za domenu i API ključeve na razini računa. Koristite ključeve za slanje domene za operacije poruka i API ključ računa za upravljačke operacije.
Konfiguracija
Osnovna konfiguracija
connectors: mailgun: enabled: true api_key: "${MAILGUN_API_KEY}" domain: "${MAILGUN_DOMAIN}" region: "us" # ili "eu" za EU regiju
sync: events: true contacts: true bounces: true complaints: true schedule: "*/15 * * * *" # Svakih 15 minuta
webhook: signing_key: "${MAILGUN_WEBHOOK_SIGNING_KEY}"
lists: engaged: 30 bounced: 31 complained: 32Mapiranje polja
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 krajnje točke
| Krajnja točka | Metoda | Opis |
|---|---|---|
https://api.mailgun.net/v3/{domain}/messages | POST | Slanje e-mail poruka |
https://api.mailgun.net/v3/{domain}/events | GET | Upit zapisnika događaja |
https://api.mailgun.net/v3/{domain}/bounces | GET | Popis vraćenih poruka |
https://api.mailgun.net/v3/{domain}/complaints | GET | Popis pritužbi |
https://api.mailgun.net/v3/{domain}/unsubscribes | GET | Popis odjavljenih |
https://api.mailgun.net/v3/{domain}/tags | GET | Popis oznaka |
https://api.mailgun.net/v3/{domain}/tags/{tag}/stats | GET | Dohvati statistike oznaka |
https://api.mailgun.net/v3/lists | GET | Popis mailing lista |
https://api.mailgun.net/v3/domains | GET | Popis domena |
https://api.mailgun.net/v4/address/validate | POST | Validacija e-mail adrese |
EU regija
Za Mailgun račune s bazom u EU, koristite https://api.eu.mailgun.net umjesto https://api.mailgun.net za sve API krajnje točke.
Primjeri koda
Inicijalizacija 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'});Slanje poruke putem Mailgun API-ja
// Slanje e-maila koristeći Mailgun 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.' }Sinkronizacija e-mail događaja u Brevo
// Upitajte Mailgun događaje i sinkronizirajte podatke o angažmanuconst 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; }}
// Pratite paginaciju za više događajaif (paging.next) { // Dohvatite sljedeću stranicu koristeći URL paging.next}Rukovanje Mailgun webhookovima
const crypto = require('crypto');
app.post('/webhooks/mailgun', async (req, res) => { // Verificirajte potpis webhookova 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 });
// Rukujte supresijom vraćenih poruka if (event === 'failed' && eventData.severity === 'permanent') { await tajo.contacts.update(email, { attributes: { MG_BOUNCE_TYPE: 'hard_bounce' }, emailBlacklisted: true }); }
res.status(200).send('OK');});Sinkronizacija vraćenih poruka i pritužbi
// Sinkronizacija vraćenih adresa za higijenu popisaconst 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') });}Ograničenja brzine
| Krajnja točka | Ograničenje | Napomene |
|---|---|---|
| Messages API | Ovisi o planu | 100/sat (besplatno), neograničeno (plaćeno) |
| Events API | Bez eksplicitnog ograničenja | Koristite paginaciju s maks. 300 stavki |
| Validation API | Na temelju plana | Plaćanje po validaciji |
| Webhookovi | U stvarnom vremenu | Bez ograničenja brzine na dostavu |
| Suppressions API | Bez eksplicitnog ograničenja | Primjenjuje se standardno ograničenje brzine |
Ograničenja slanja
Mailgun primjenjuje ograničenja slanja na temelju vašeg plana i reputacije domene. Nove domene počinju s nižim ograničenjima koja se povećavaju kako se poboljšava vaša reputacija pošiljatelja. Pratite statistike vaše domene u Mailgun dashboardu.
Rješavanje problema
| Problem | Uzrok | Rješenje |
|---|---|---|
| 401 Unauthorized | Nevažeći API ključ | Verificirajte API ključ u Mailgun dashboardu |
| Domena nije verificirana | Nedostaju DNS zapisi | Dodajte potrebne TXT, CNAME, MX zapise |
| Webhook nije primljen | URL nije dostupan | Osigurajte da je URL webhookova javno dostupan |
| Nedostaju događaji | Preuzak raspon vremena | Proširite parametre begin/end |
| Niska isporučivost | Reputacija domene | Provjerite statistike domene i autentifikaciju |
Način otklanjanja grešaka
connectors: mailgun: debug: true log_level: verbose log_webhooks: true log_events: truePreporučene prakse
- Verificirajte domene pošiljanja - Dovršite DNS verifikaciju za optimalnu isporučivost
- Koristite webhookove za događaje - Isporuka webhookova u stvarnom vremenu naspram anketiranja Events API-ja
- Proaktivno rukujte vraćenim porukama - Odmah supresirajte hard bounce adrese u Brevo
- Označite vaše poruke - Koristite oznake za kategorizaciju i analizu performansi e-maila
- Pratite reputaciju domene - Pratite metrike isporučivosti u Mailgun dashboardu
- Koristite validaciju e-maila - Validirajte adrese prije dodavanja na Brevo popise
Sigurnost
- HTTP Basic Auth - API ključ prenesen putem zaglavlja Authorization
- Potpisi webhookova - HMAC-SHA256 verifikacija potpisa
- Verifikacija domene - SPF, DKIM i DMARC DNS autentifikacija
- Lista dopuštenih IP-ova - Dostupno za planove s namjenskim IP-om
- TLS šifriranje - Sve API krajnje točke zahtijevaju HTTPS
- Rotacija ključeva - Periodično rotirajte API ključeve putem Mailgun dashboarda