Mailgun Connector
Poveži Mailgun z Brevo prek Tajo za poenotenje transakcijskih in marketinških e-mailnih podatkov, sinhronizacijo dostavljenih dogodkov in metrik angažiranosti ter konsolidacijo e-mailne infrastrukture v enoten pogled strank.
Pregled
| Lastnost | Vrednost |
|---|---|
| Platforma | Mailgun (by Sinch) |
| Kategorija | E-mail marketing |
| Zahtevnost nastavitve | Enostavna |
| Uradna integracija | Ne |
| Sinhronizirani podatki | Dogodki, stiki, dostavljivost, kampanje |
| Metoda avtentikacije | API Key (HTTP Basic Auth) |
Funkcionalnosti
- Sinhronizacija dostavljenih dogodkov – sledi dostavilnim, odbitim, odprtim in kliknjenim dogodkom
- Metrike angažiranosti – sinhroniziraj stopnje odpiranja in klikov v atribute stikov Brevo
- Upravljanje odbite pošte – samodejno zaustavi odklonjene naslove v Brevo
- Obravnava pritožb – sinhroniziraj pritožbe glede neželene pošte za higieno seznamov
- Ugled domene – sprljuj zdravje domene pošiljatelja in dostavljivost
- Sledenje transakcijskim e-mailom – koreliraj transakcijska pošiljanja z marketinškimi podatki
Predpogoji
Preden začneš, se prepričaj, da imaš:
- Račun Mailgun s preverjeno domeno pošiljatelja
- API ključ Mailgun iz nadzorne plošče Mailgun
- Brevo račun z dostopom do API
- Tajo račun z dovoljenji za konektorje
Avtentikacija
Avtentikacija z API ključem
Mailgun za avtentikacijo uporablja HTTP Basic Auth z api kot uporabniškim imenom in tvojim API ključem kot geslom:
# 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' ...Vrste API ključev
Mailgun zagotavlja ključe pošiljanja za specifičen domeno in API ključe na ravni računa. Za operacije sporočil uporabi ključe pošiljanja domene, za upravljalne operacije pa API ključ računa.
Konfiguracija
Osnovna nastavitev
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: 32Preslikava polj
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_UNSUBSCRIBEDKončne točke API
| Končna točka | Metoda | Opis |
|---|---|---|
https://api.mailgun.net/v3/{domain}/messages | POST | Pošiljanje e-mailnih sporočil |
https://api.mailgun.net/v3/{domain}/events | GET | Poizvedba dnevnikov dogodkov |
https://api.mailgun.net/v3/{domain}/bounces | GET | Seznam odbite pošte |
https://api.mailgun.net/v3/{domain}/complaints | GET | Seznam pritožb |
https://api.mailgun.net/v3/{domain}/unsubscribes | GET | Seznam odjav |
https://api.mailgun.net/v3/{domain}/tags | GET | Seznam oznak |
https://api.mailgun.net/v3/{domain}/tags/{tag}/stats | GET | Pridobi statistiko oznak |
https://api.mailgun.net/v3/lists | GET | Seznam poštnih list |
https://api.mailgun.net/v3/domains | GET | Seznam domen |
https://api.mailgun.net/v4/address/validate | POST | Preveri e-mailni naslov |
Regija EU
Za račune Mailgun v EU namesto https://api.mailgun.net za vse končne točke API uporabi https://api.eu.mailgun.net.
Primeri kode
Inicializacija konektorja
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'});Pošiljanje sporočila prek 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.' }Sinhronizacija e-mailnih dogodkov v 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}Obravnava webhooks 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');});Sinhronizacija odbite pošte in pritožb
// 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') });}Omejitve hitrosti
| Končna točka | Omejitev | Opombe |
|---|---|---|
| Messages API | Odvisno od plana | 100/uro (brezplačno), neomejeno (plačljivo) |
| Events API | Ni izrecne omejitve | Uporabi paginacijo z največ 300 elementi |
| Validation API | Glede na plan | Plačilo po potrditvi |
| Webhooks | V realnem času | Brez omejitve hitrosti pri dostavi |
| Suppressions API | Ni izrecne omejitve | Velja standardno omejevanje hitrosti |
Omejitve pošiljanja
Mailgun uveljavlja omejitve pošiljanja glede na tvoj plan in ugled domene. Nove domene začnejo z nižjimi omejitvami, ki se povečujejo z izboljšanjem ugleda pošiljatelja. Sprljuj statistike domene v nadzorni plošči Mailgun.
Odpravljanje težav
| Težava | Vzrok | Rešitev |
|---|---|---|
| 401 Unauthorized | Neveljaven API ključ | Preveri API ključ v nadzorni plošči Mailgun |
| Domene ni preverjena | Manjkajoči zapisi DNS | Dodaj zahtevane zapise TXT, CNAME, MX |
| Webhook ni prejet | URL ni dostopen | Zagotovi, da je URL webhooks javno dosegljiv |
| Manjkajoči dogodki | Preozek časovni razpon | Razširi parametre begin/end |
| Nizka dostavljivost | Ugled domene | Preveri statistike domene in avtentikacijo |
Način odpravljanja napak
connectors: mailgun: debug: true log_level: verbose log_webhooks: true log_events: trueNajboljše prakse
- Preveri domene pošiljatelja – za optimalno dostavljivost zaključi preverjanje DNS
- Za dogodke uporabi webhooks – dostava webhooks v realnem času v primerjavi s anketiranjem Events API
- Proaktivno upravljaj odbito pošto – takoj zaustavi naslove s trdimi odbitnicami v Brevo
- Označi svoja sporočila – za kategorizacijo in analizo uspešnosti e-mailov uporabi oznake
- Sprljuj ugled domene – sledi metrikam dostavljivosti v nadzorni plošči Mailgun
- Preverjaj e-mailne naslove – pred dodajanjem v sezname Brevo preveri naslove
Varnost
- HTTP Basic Auth – API ključ posredovan prek glave Authorization
- Podpisi webhooks – preverjanje podpisa HMAC-SHA256
- Preverjanje domene – DNS avtentikacija SPF, DKIM in DMARC
- Dovoljevanje IP – na voljo za plane z namenskim IP
- TLS šifriranje – vse končne točke API zahtevajo HTTPS
- Rotacija ključev – periodično menjaj API ključe prek nadzorne plošče Mailgun