Connettore Mailgun

Collega Mailgun a Brevo tramite Tajo per unificare i dati delle email transazionali e marketing, sincronizzare eventi di consegna e metriche di engagement, e consolidare la tua infrastruttura email in un’unica visione cliente.

Panoramica

ProprietàValore
PiattaformaMailgun (by Sinch)
CategoriaEmail Marketing
Complessità di setupFacile
Integrazione ufficialeNo
Dati sincronizzatiEventi, Contatti, Deliverability, Campagne
Metodo di autenticazioneChiave API (HTTP Basic Auth)

Funzionalità

  • Sync eventi di consegna - Traccia eventi di consegna, bounce, apertura e click
  • Metriche di engagement - Sincronizza i tassi di apertura e click agli attributi di contatto Brevo
  • Gestione bounce - Sopprimi automaticamente gli indirizzi in bounce in Brevo
  • Gestione complaint - Sincronizza i complaint spam per l’igiene della lista
  • Reputazione del dominio - Monitora la salute del dominio mittente e la deliverability
  • Tracciamento email transazionali - Correla gli invii transazionali con i dati marketing

Prerequisiti

Prima di iniziare, assicurati di avere:

  1. Un account Mailgun con un dominio mittente verificato
  2. Una chiave API Mailgun dalla dashboard Mailgun
  3. Un account Brevo con accesso API
  4. Un account Tajo con permessi connector

Autenticazione

Autenticazione con chiave API

Mailgun utilizza HTTP Basic Authentication con api come username e la tua chiave API come password:

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' ...

Tipi di chiave API

Mailgun fornisce chiavi di invio specifiche per dominio e chiavi API a livello account. Usa le chiavi di invio del dominio per le operazioni sui messaggi e la chiave API account per le operazioni di gestione.

Configurazione

Setup di base

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

Mappatura dei campi

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

Endpoint API

EndpointMetodoDescrizione
https://api.mailgun.net/v3/{domain}/messagesPOSTInvia messaggi email
https://api.mailgun.net/v3/{domain}/eventsGETInterroga i log degli eventi
https://api.mailgun.net/v3/{domain}/bouncesGETElenca i bounce
https://api.mailgun.net/v3/{domain}/complaintsGETElenca i complaint
https://api.mailgun.net/v3/{domain}/unsubscribesGETElenca le disiscrizioni
https://api.mailgun.net/v3/{domain}/tagsGETElenca i tag
https://api.mailgun.net/v3/{domain}/tags/{tag}/statsGETOttieni le statistiche di un tag
https://api.mailgun.net/v3/listsGETElenca le mailing list
https://api.mailgun.net/v3/domainsGETElenca i domini
https://api.mailgun.net/v4/address/validatePOSTConvalida un indirizzo email

Regione EU

Per gli account Mailgun basati in UE, usa https://api.eu.mailgun.net invece di https://api.mailgun.net per tutti gli endpoint API.

Esempi di codice

Inizializza il connettore

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'
});

Invia un messaggio tramite l’API Mailgun

// 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.' }

Sincronizza gli eventi email su 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
}

Gestisci i webhook 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');
});

Sincronizza bounce e complaint

// 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')
});
}

Limiti di velocità

EndpointLimiteNote
Messages APIVaria in base al piano100/h (gratuito), illimitato (a pagamento)
Events APINessun limite esplicitoUsa la paginazione con max 300 elementi
Validation APIBasato sul pianoPay-per-validation
WebhookTempo realeNessun limite di velocità sulla consegna
Suppressions APINessun limite esplicitoSi applica il rate limiting standard

Limiti di invio

Mailgun applica limiti di invio in base al tuo piano e alla reputazione del dominio. I nuovi domini iniziano con limiti più bassi che aumentano con il miglioramento della reputazione mittente. Monitora le statistiche del dominio nella dashboard Mailgun.

Risoluzione dei problemi

ProblemaCausaSoluzione
401 UnauthorizedChiave API non validaVerifica la chiave API nella dashboard Mailgun
Dominio non verificatoRecord DNS mancantiAggiungi i record TXT, CNAME, MX richiesti
Webhook non ricevutoURL non accessibileAssicurati che l’URL del webhook sia raggiungibile pubblicamente
Eventi mancantiIntervallo temporale troppo strettoEspandi i parametri begin/end
Bassa deliverabilityReputazione del dominioControlla statistiche del dominio e autenticazione

Modalità debug

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

Best practice

  1. Verifica i domini di invio - Completa la verifica DNS per una deliverability ottimale
  2. Usa i webhook per gli eventi - Consegna webhook in tempo reale rispetto al polling dell’Events API
  3. Gestisci i bounce in modo proattivo - Sopprimi immediatamente gli hard bounce in Brevo
  4. Tagga i tuoi messaggi - Usa i tag per categorizzare e analizzare la performance email
  5. Monitora la reputazione del dominio - Traccia le metriche di deliverability nella dashboard Mailgun
  6. Usa la validazione email - Convalida gli indirizzi prima di aggiungerli alle liste Brevo

Sicurezza

  • HTTP Basic Auth - Chiave API trasmessa tramite header Authorization
  • Firme webhook - Verifica firma HMAC-SHA256
  • Verifica del dominio - Autenticazione DNS SPF, DKIM e DMARC
  • IP whitelisting - Disponibile per piani con IP dedicato
  • Cifratura TLS - Tutti gli endpoint API richiedono HTTPS
  • Rotazione delle chiavi - Ruota le chiavi API periodicamente tramite la dashboard Mailgun

Risorse correlate

Subscribe to updates

developer-docs

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

auto-detect
Assistente AI

Ciao! Chiedimi qualsiasi cosa sulla documentazione.