Mailgun konektor

Poveži Mailgun sa Brevo putem Tajo da ujednačiš transakcione i marketinške email podatke, sinhronizuješ događaje isporuke i metrike angažovanja, i konsoliduješ email infrastrukturu u jedinstven prikaz kupca.

Pregled

SvojstvoVrednost
PlatformaMailgun (by Sinch)
KategorijaEmail marketing
Složenost podešavanjaLako
Zvanična integracijaNe
Sinhronizovani podaciDogađaji, Kontakti, Dostavljivost, Kampanje
Metoda autentifikacijeAPI ključ (HTTP Basic Auth)

Karakteristike

  • Sinhronizacija događaja isporuke - Praćenje dostavljenih, odbijenih, otvorenih i kliknutih događaja
  • Metrike angažovanja - Sinhronizacija stopa otvaranja i klikanja na Brevo atribute kontakta
  • Upravljanje odbijanjem - Automatsko suzbijanje odbijenih adresa u Brevo
  • Obrada pritužbi - Sinhronizacija spam pritužbi za higijenu liste
  • Reputacija domena - Praćenje zdravlja domene za slanje i dostavljivosti
  • Praćenje transakcionih emailova - Korelacija transakcionih slanja sa marketinškim podacima

Preduslovi

Pre nego što započneš, proveri da imaš:

  1. Mailgun nalog sa verifikovanom domenom za slanje
  2. Mailgun API ključ sa Mailgun Dashboard-a
  3. Brevo nalog sa API pristupom
  4. Tajo nalog sa dozvolama za konektore

Autentifikacija

Autentifikacija API ključem

Mailgun koristi HTTP Basic autentifikaciju sa api kao korisničkim imenom i tvojim API ključem kao lozinkom:

Terminal window
# Get your API key from https://app.mailgun.com/settings/api_security
export MAILGUN_API_KEY=key-your-api-key
export MAILGUN_DOMAIN=your-domain.com
export TAJO_API_KEY=your_tajo_api_key
export BREVO_API_KEY=your_brevo_api_key
// HTTP Basic Auth format
const headers = {
'Authorization': `Basic ${Buffer.from(
`api:${process.env.MAILGUN_API_KEY}`
).toString('base64')}`
};
// Or using curl
// curl -s --user 'api:YOUR_API_KEY' ...

Tipovi API ključeva

Mailgun pruža ključeve specifične za domenu za slanje i API ključeve na nivou naloga. Koristi ključeve za slanje domene za operacije poruka i API ključ naloga za operacije upravljanja.

Konfiguracija

Osnovno podešavanje

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: 32

Mapiranje 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_UNSUBSCRIBED

API endpointi

EndpointMetodaOpis
https://api.mailgun.net/v3/{domain}/messagesPOSTSlanje email poruka
https://api.mailgun.net/v3/{domain}/eventsGETPretraga zapisa događaja
https://api.mailgun.net/v3/{domain}/bouncesGETListanje odbijanja
https://api.mailgun.net/v3/{domain}/complaintsGETListanje pritužbi
https://api.mailgun.net/v3/{domain}/unsubscribesGETListanje odjava
https://api.mailgun.net/v3/{domain}/tagsGETListanje tagova
https://api.mailgun.net/v3/{domain}/tags/{tag}/statsGETDohvatanje statistike taga
https://api.mailgun.net/v3/listsGETListanje mailing lista
https://api.mailgun.net/v3/domainsGETListanje domena
https://api.mailgun.net/v4/address/validatePOSTValidacija email adrese

EU region

Za Mailgun naloge u EU regionu, koristi https://api.eu.mailgun.net umesto https://api.mailgun.net za sve API endpointe.

Primeri 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

// Send an email using Mailgun's Messages API
const formData = new URLSearchParams();
formData.append('from', `Your App <noreply@${domain}>`);
formData.append('to', '[email protected]');
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 email događaja sa Brevo

// Query Mailgun events and sync engagement data
const 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 events
if (paging.next) {
// Fetch next page using paging.next URL
}

Obrada Mailgun webhook-ova

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 odbijanja i pritužbi

// Sync bounced addresses for list hygiene
const 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

EndpointLimitNapomene
Messages APIZavisi od plana100/sat (besplatni), neograničeno (plaćeni)
Events APINema eksplicitnog limitaKoristi paginaciju sa max 300 stavki
Validation APINa osnovu planaNaplata po validaciji
Webhook-oviU realnom vremenuNema ograničenja brzine isporuke
Suppressions APINema eksplicitnog limitaStandardno ograničenje brzine se primenjuje

Limiti slanja

Mailgun primenjuje limite slanja na osnovu tvog plana i reputacije domene. Nove domene počinju sa nižim limitima koji se povećavaju kako se reputacija pošiljaoca poboljšava. Prati statistike domene u Mailgun dashboard-u.

Rešavanje problema

ProblemUzrokRešenje
401 UnauthorizedNevažeći API ključVerifikuj API ključ u Mailgun dashboard-u
Domen nije verifikovanDNS zapisi nedostajuDodaj potrebne TXT, CNAME, MX zapise
Webhook nije primljenURL nije dostupanOsiguraj da je webhook URL javno dostupan
Nedostaju događajiVremenski opseg preuzakProširi begin/end parametre
Niska dostavljivostReputacija domeneProveri statistike domene i autentifikaciju

Debug režim

connectors:
mailgun:
debug: true
log_level: verbose
log_webhooks: true
log_events: true

Najbolje prakse

  1. Verifikuj domene za slanje - Završi DNS verifikaciju za optimalnu dostavljivost
  2. Koristi webhook-ove za događaje - Isporuka webhook-ova u realnom vremenu naspram ispitivanja Events API-ja
  3. Aktivno obrađuj odbijanja - Odmah suzbij tvrda odbijanja u Brevo
  4. Taguj poruke - Koristi tagove za kategorizaciju i analizu performansi emailova
  5. Prati reputaciju domene - Prati metrike dostavljivosti u Mailgun dashboard-u
  6. Koristi validaciju emailova - Validiraj adrese pre dodavanja na Brevo liste

Bezbednost

  • HTTP Basic Auth - API ključ prosleđen putem Authorization headera
  • Potpisi webhook-ova - Verifikacija HMAC-SHA256 potpisa
  • Verifikacija domene - SPF, DKIM i DMARC DNS autentifikacija
  • Bela lista IP adresa - Dostupna za planove sa dedikovanim IP adresama
  • TLS enkripcija - Svi API endpointi zahtevaju HTTPS
  • Rotacija ključeva - Rotiraj API ključeve periodično putem Mailgun dashboard-a

Povezani resursi

Subscribe to updates

developer-docs

Drop your email or phone number — we'll send you what matters next.

auto-detect
AI асистент

Здраво! Питајте ме о документацији.