Σύνδεσμος Mailgun
Συνδέστε το Mailgun με το Brevo μέσω Tajo για ενοποίηση δεδομένων συναλλακτικού και marketing email, συγχρονισμό εκδηλώσεων παράδοσης και μετρικών αφοσίωσης, και ενοποίηση της υποδομής email σε μία ενιαία εικόνα πελάτη.
Επισκόπηση
| Ιδιότητα | Τιμή |
|---|---|
| Πλατφόρμα | Mailgun (by Sinch) |
| Κατηγορία | Email Marketing |
| Πολυπλοκότητα Ρύθμισης | Εύκολη |
| Επίσημη Ενσωμάτωση | Όχι |
| Δεδομένα που Συγχρονίζονται | Εκδηλώσεις, Επαφές, Δυνατότητα Παράδοσης, Καμπάνιες |
| Μέθοδος Πιστοποίησης | API Key (HTTP Basic Auth) |
Χαρακτηριστικά
- Συγχρονισμός εκδηλώσεων παράδοσης - Παρακολούθηση εκδηλώσεων παράδοσης, αναπήδησης, ανοίγματος και κλικ
- Μετρικά αφοσίωσης - Συγχρονισμός ποσοστών ανοίγματος και κλικ σε χαρακτηριστικά επαφών Brevo
- Διαχείριση αναπηδήσεων - Αυτόματη καταστολή διευθύνσεων αναπήδησης στο Brevo
- Χειρισμός παραπόνων - Συγχρονισμός παραπόνων spam για υγιεινή λίστας
- Φήμη τομέα - Παρακολούθηση υγείας τομέα αποστολής και δυνατότητας παράδοσης
- Παρακολούθηση συναλλακτικού email - Συσχέτιση συναλλακτικών αποστολών με δεδομένα marketing
Προαπαιτούμενα
Πριν ξεκινήσετε, βεβαιωθείτε ότι διαθέτετε:
- Λογαριασμό Mailgun με επαληθευμένο τομέα αποστολής
- Κλειδί API Mailgun από το Mailgun Dashboard
- Λογαριασμό Brevo με πρόσβαση API
- Λογαριασμό Tajo με δικαιώματα συνδέσμου
Πιστοποίηση
Πιστοποίηση με Κλειδί API
Το Mailgun χρησιμοποιεί HTTP Basic Authentication με api ως username και το κλειδί API σας ως κωδικό:
# 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' ...Τύποι Κλειδιών API
Το Mailgun παρέχει κλειδιά αποστολής ανά τομέα και κλειδιά API επιπέδου λογαριασμού. Χρησιμοποιήστε κλειδιά αποστολής τομέα για λειτουργίες μηνυμάτων και το κλειδί API λογαριασμού για λειτουργίες διαχείρισης.
Διαμόρφωση
Βασική Ρύθμιση
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Αντιστοίχιση Πεδίων
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_UNSUBSCRIBEDEndpoints API
| Endpoint | Μέθοδος | Περιγραφή |
|---|---|---|
https://api.mailgun.net/v3/{domain}/messages | POST | Αποστολή email μηνυμάτων |
https://api.mailgun.net/v3/{domain}/events | GET | Ερώτημα αρχείων καταγραφής εκδηλώσεων |
https://api.mailgun.net/v3/{domain}/bounces | GET | Λίστα αναπηδήσεων |
https://api.mailgun.net/v3/{domain}/complaints | GET | Λίστα παραπόνων |
https://api.mailgun.net/v3/{domain}/unsubscribes | GET | Λίστα διαγραφών |
https://api.mailgun.net/v3/{domain}/tags | GET | Λίστα ετικετών |
https://api.mailgun.net/v3/{domain}/tags/{tag}/stats | GET | Λήψη στατιστικών ετικέτας |
https://api.mailgun.net/v3/lists | GET | Λίστα mailing lists |
https://api.mailgun.net/v3/domains | GET | Λίστα τομέων |
https://api.mailgun.net/v4/address/validate | POST | Επικύρωση διεύθυνσης email |
Περιοχή EU
Για λογαριασμούς Mailgun με έδρα την EU, χρησιμοποιήστε https://api.eu.mailgun.net αντί για https://api.mailgun.net για όλα τα endpoints API.
Παραδείγματα Κώδικα
Αρχικοποίηση Συνδέσμου
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'});Αποστολή Μηνύματος μέσω 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.' }Συγχρονισμός Εκδηλώσεων Email στο 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}Χειρισμός 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');});Συγχρονισμός Αναπηδήσεων και Παραπόνων
// 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') });}Όρια Ρυθμού
| Endpoint | Όριο | Σημειώσεις |
|---|---|---|
| Messages API | Διαφέρει ανά πλάνο | 100/ώρα (δωρεάν), απεριόριστο (επί πληρωμή) |
| Events API | Χωρίς ρητό όριο | Χρησιμοποιήστε σελιδοποίηση με μέγιστο 300 στοιχεία |
| Validation API | Βάσει πλάνου | Χρέωση ανά επικύρωση |
| Webhooks | Σε πραγματικό χρόνο | Χωρίς όριο ρυθμού παράδοσης |
| Suppressions API | Χωρίς ρητό όριο | Ισχύει τυπικός περιορισμός ρυθμού |
Όρια Αποστολής
Το Mailgun επιβάλλει όρια αποστολής βάσει του πλάνου και της φήμης τομέα σας. Νέοι τομείς ξεκινούν με χαμηλότερα όρια που αυξάνονται καθώς βελτιώνεται η φήμη αποστολής. Παρακολουθήστε τα στατιστικά τομέα σας στο dashboard Mailgun.
Αντιμετώπιση Προβλημάτων
| Πρόβλημα | Αιτία | Λύση |
|---|---|---|
| 401 Unauthorized | Μη έγκυρο κλειδί API | Επαληθεύστε κλειδί API στο dashboard Mailgun |
| Μη επαληθευμένος τομέας | Λείπουν εγγραφές DNS | Προσθέστε τις απαιτούμενες εγγραφές TXT, CNAME, MX |
| Δεν λαμβάνεται webhook | Μη προσβάσιμο URL | Βεβαιωθείτε ότι το URL webhook είναι δημόσια προσβάσιμο |
| Λείπουν εκδηλώσεις | Υπερβολικά στενό χρονικό εύρος | Διευρύνετε παραμέτρους begin/end |
| Χαμηλή δυνατότητα παράδοσης | Φήμη τομέα | Ελέγξτε στατιστικά τομέα και πιστοποίηση |
Λειτουργία Εντοπισμού Σφαλμάτων
connectors: mailgun: debug: true log_level: verbose log_webhooks: true log_events: trueΒέλτιστες Πρακτικές
- Επαληθεύστε τομείς αποστολής - Ολοκληρώστε επαλήθευση DNS για βέλτιστη δυνατότητα παράδοσης
- Χρησιμοποιήστε webhooks για εκδηλώσεις - Παράδοση webhook σε πραγματικό χρόνο έναντι polling του Events API
- Χειριστείτε αναπηδήσεις προληπτικά - Καταστείλετε αμέσως σκληρές αναπηδήσεις στο Brevo
- Επισημάνετε τα μηνύματά σας - Χρησιμοποιήστε ετικέτες για κατηγοριοποίηση και ανάλυση απόδοσης email
- Παρακολουθήστε φήμη τομέα - Παρακολουθήστε μετρικά δυνατότητας παράδοσης στο dashboard Mailgun
- Χρησιμοποιήστε επικύρωση email - Επικυρώστε διευθύνσεις πριν τη προσθήκη σε λίστες Brevo
Ασφάλεια
- HTTP Basic Auth - Κλειδί API μεταδίδεται μέσω κεφαλίδας Authorization
- Υπογραφές webhook - Επαλήθευση υπογραφής HMAC-SHA256
- Επαλήθευση τομέα - Πιστοποίηση DNS με SPF, DKIM και DMARC
- Λίστα επιτρεπόμενων IP - Διαθέσιμο για πλάνα αφιερωμένης IP
- Κρυπτογράφηση TLS - Όλα τα endpoints API απαιτούν HTTPS
- Εναλλαγή κλειδιών - Εναλλαγή κλειδιών API περιοδικά μέσω dashboard Mailgun