Conector Mailgun
Conectați Mailgun la Brevo prin Tajo pentru a vă unifica datele de e-mail tranzacțional și de marketing, a sincroniza evenimentele de livrare și metricile de implicare și a consolida infrastructura de e-mail într-o singură vizualizare a clientului.
Prezentare generală
| Proprietate | Valoare |
|---|---|
| Platformă | Mailgun (by Sinch) |
| Categorie | Marketing prin e-mail |
| Complexitate configurare | Ușoară |
| Integrare oficială | Nu |
| Date sincronizate | Evenimente, Contacte, Livrabilitate, Campanii |
| Metodă autentificare | Cheie API (HTTP Basic Auth) |
Funcționalități
- Sincronizare evenimente livrare - Urmăriți evenimentele de livrare, respingere, deschidere și clic
- Metrici de implicare - Sincronizați ratele de deschidere și clic la atributele de contact Brevo
- Gestionare respingeri - Suprimați automat adresele respinse în Brevo
- Gestionare reclamații - Sincronizați reclamațiile de spam pentru igienă listă
- Reputație domeniu - Monitorizați sănătatea domeniului de trimitere și livrabilitatea
- Urmărire e-mail tranzacțional - Corelați trimiterile tranzacționale cu datele de marketing
Cerințe preliminare
Înainte de a începe, asigurați-vă că aveți:
- Un cont Mailgun cu un domeniu de trimitere verificat
- O cheie API Mailgun din Tabloul de bord Mailgun
- Un cont Brevo cu acces API
- Un cont Tajo cu permisiuni connector
Autentificare
Autentificare cu cheie API
Mailgun utilizează HTTP Basic Authentication cu api ca nume de utilizator și cheia API ca parolă:
# 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' ...Tipuri de chei API
Mailgun oferă chei de trimitere specifice domeniului și chei API la nivel de cont. Utilizați cheile de trimitere domeniu pentru operațiunile de mesaje și cheia API de cont pentru operațiunile de management.
Configurare
Configurare de bază
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: 32Mapare câmpuri
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_UNSUBSCRIBEDPuncte finale API
| Punct final | Metodă | Descriere |
|---|---|---|
https://api.mailgun.net/v3/{domain}/messages | POST | Trimite mesaje e-mail |
https://api.mailgun.net/v3/{domain}/events | GET | Interogă jurnalele de evenimente |
https://api.mailgun.net/v3/{domain}/bounces | GET | Listează respingerile |
https://api.mailgun.net/v3/{domain}/complaints | GET | Listează reclamațiile |
https://api.mailgun.net/v3/{domain}/unsubscribes | GET | Listează dezabonările |
https://api.mailgun.net/v3/{domain}/tags | GET | Listează etichetele |
https://api.mailgun.net/v3/{domain}/tags/{tag}/stats | GET | Obține statisticile etichetei |
https://api.mailgun.net/v3/lists | GET | Listează listele de corespondență |
https://api.mailgun.net/v3/domains | GET | Listează domeniile |
https://api.mailgun.net/v4/address/validate | POST | Validează adresa de e-mail |
Regiune EU
Pentru conturile Mailgun din UE, utilizați https://api.eu.mailgun.net în loc de https://api.mailgun.net pentru toate punctele finale API.
Exemple de cod
Inițializare conector
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'});Trimitere mesaj prin API Mailgun
// 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.' }Sincronizare evenimente e-mail la 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}Gestionare webhook-uri 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');});Sincronizare respingeri și reclamații
// 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') });}Limite de rată
| Punct final | Limită | Note |
|---|---|---|
| Messages API | Variază în funcție de plan | 100/oră (gratuit), nelimitat (plătit) |
| Events API | Fără limită explicită | Utilizați paginarea cu max 300 articole |
| Validation API | Bazat pe plan | Plată per validare |
| Webhook-uri | Timp real | Fără limită de rată la livrare |
| Suppressions API | Fără limită explicită | Se aplică limitarea standard a ratei |
Limite de trimitere
Mailgun aplică limite de trimitere bazate pe planul și reputația domeniului. Domeniile noi încep cu limite mai mici care cresc pe măsură ce reputația de expeditor se îmbunătățește. Monitorizați statisticile domeniului în tabloul de bord Mailgun.
Depanare
| Problemă | Cauză | Soluție |
|---|---|---|
| 401 Neautorizat | Cheie API invalidă | Verificați cheia API în tabloul de bord Mailgun |
| Domeniu neverificat | Înregistrări DNS lipsă | Adăugați înregistrările TXT, CNAME, MX necesare |
| Webhook neprimit | URL inaccesibil | Asigurați că URL-ul webhook este accesibil public |
| Evenimente lipsă | Interval de timp prea restrâns | Extindeți parametrii begin/end |
| Livrabilitate scăzută | Reputație domeniu | Verificați statisticile domeniului și autentificarea |
Modul de depanare
connectors: mailgun: debug: true log_level: verbose log_webhooks: true log_events: trueBune practici
- Verificați domeniile de trimitere - Completați verificarea DNS pentru livrabilitate optimă
- Utilizați webhook-uri pentru evenimente - Livrare webhook în timp real față de interogarea Events API
- Gestionați proactiv respingerile - Suprimați imediat respingerile hard în Brevo
- Etichetați mesajele - Utilizați etichete pentru a categoriza și analiza performanța e-mailului
- Monitorizați reputația domeniului - Urmăriți metricile de livrabilitate în tabloul de bord Mailgun
- Utilizați validarea e-mailurilor - Validați adresele înainte de adăugarea în listele Brevo
Securitate
- HTTP Basic Auth - Cheie API transmisă prin antetul Authorization
- Semnături webhook - Verificare semnătură HMAC-SHA256
- Verificare domeniu - Autentificare DNS SPF, DKIM și DMARC
- IP whitelisting - Disponibil pentru planurile cu IP dedicat
- Criptare TLS - Toate punctele finale API necesită HTTPS
- Rotație chei - Rotați periodic cheile API prin tabloul de bord Mailgun