Mailgun Bağlayıcısı
İşlemsel ve pazarlama e-posta verilerinizi birleştirmek, teslimat olaylarını ve etkileşim metriklerini senkronize etmek ve e-posta altyapınızı tek bir müşteri görünümüne konsolide etmek için Mailgun’u Tajo aracılığıyla Brevo’ya bağlayın.
Genel Bakış
| Özellik | Değer |
|---|---|
| Platform | Mailgun (Sinch tarafından) |
| Kategori | E-posta Pazarlaması |
| Kurulum Karmaşıklığı | Kolay |
| Resmi Entegrasyon | Hayır |
| Senkronize Edilen Veri | Olaylar, Kişiler, Teslim Edilebilirlik, Kampanyalar |
| Kimlik Doğrulama Yöntemi | API Anahtarı (HTTP Basic Auth) |
Özellikler
- Teslimat olay senkronizasyonu - Teslim edildi, geri döndü, açıldı ve tıklandı olaylarını takip edin
- Etkileşim metrikleri - Açılma ve tıklama oranlarını Brevo kişi özniteliklerine senkronize edin
- Geri dönme yönetimi - Geri dönen adresleri Brevo’da otomatik olarak bastırın
- Şikayet yönetimi - Liste hijyeni için spam şikayetlerini senkronize edin
- Alan adı itibarı - Gönderici alan adı sağlığını ve teslim edilebilirliği izleyin
- İşlemsel e-posta takibi - İşlemsel gönderimleri pazarlama verileriyle ilişkilendirin
Ön Koşullar
Başlamadan önce sahip olmanız gerekenler:
- Doğrulanmış gönderici alan adı olan bir Mailgun hesabı
- Mailgun Dashboard’dan bir Mailgun API anahtarı
- API erişimi olan bir Brevo hesabı
- Bağlayıcı izinlerine sahip bir Tajo hesabı
Kimlik Doğrulama
API Anahtar Kimlik Doğrulaması
Mailgun, kullanıcı adı olarak api ve şifre olarak API anahtarınızla HTTP Basic Authentication kullanır:
# 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 Anahtar Türleri
Mailgun, alan adına özel gönderim anahtarları ve hesap seviyesi API anahtarları sağlar. Mesaj işlemleri için alan adı gönderim anahtarlarını, yönetim işlemleri için hesap API anahtarını kullanın.
Yapılandırma
Temel Kurulum
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: 32Alan Eşleme
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_UNSUBSCRIBEDAPI Uç Noktaları
| Uç Nokta | Yöntem | Açıklama |
|---|---|---|
https://api.mailgun.net/v3/{domain}/messages | POST | E-posta mesajları gönder |
https://api.mailgun.net/v3/{domain}/events | GET | Olay günlüklerini sorgula |
https://api.mailgun.net/v3/{domain}/bounces | GET | Geri dönenleri listele |
https://api.mailgun.net/v3/{domain}/complaints | GET | Şikayetleri listele |
https://api.mailgun.net/v3/{domain}/unsubscribes | GET | Abonelikten çıkanları listele |
https://api.mailgun.net/v3/{domain}/tags | GET | Etiketleri listele |
https://api.mailgun.net/v3/{domain}/tags/{tag}/stats | GET | Etiket istatistiklerini al |
https://api.mailgun.net/v3/lists | GET | Posta listelerini listele |
https://api.mailgun.net/v3/domains | GET | Alan adlarını listele |
https://api.mailgun.net/v4/address/validate | POST | E-posta adresini doğrula |
AB Bölgesi
AB merkezli Mailgun hesapları için tüm API uç noktalarında https://api.mailgun.net yerine https://api.eu.mailgun.net kullanın.
Kod Örnekleri
Bağlayıcıyı Başlat
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 Üzerinden Bir Mesaj Gönder
// 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.' }E-posta Olaylarını Brevo’ya Senkronize Et
// 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}Mailgun Webhook’larını İşle
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');});Geri Dönmeleri ve Şikayetleri Senkronize Et
// 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') });}Hız Limitleri
| Uç Nokta | Limit | Notlar |
|---|---|---|
| Messages API | Plana göre değişir | 100/saat (ücretsiz), sınırsız (ücretli) |
| Events API | Açık limit yok | 300 öğe maksimum ile sayfalama kullanın |
| Validation API | Plana göre | Doğrulama başına ödeme |
| Webhook’lar | Gerçek zamanlı | Teslimatta hız limiti yok |
| Suppressions API | Açık limit yok | Standart hız sınırlaması uygulanır |
Gönderim Limitleri
Mailgun, planınıza ve alan adı itibarınıza göre gönderim limitleri uygular. Yeni alan adları, gönderici itibarınız geliştikçe artan düşük limitlerle başlar. Alan adı istatistiklerinizi Mailgun panosunda izleyin.
Sorun Giderme
| Sorun | Neden | Çözüm |
|---|---|---|
| 401 Unauthorized | Geçersiz API anahtarı | Mailgun panosunda API anahtarını doğrulayın |
| Alan adı doğrulanmadı | DNS kayıtları eksik | Gerekli TXT, CNAME, MX kayıtlarını ekleyin |
| Webhook alınmıyor | URL erişilemez | Webhook URL’nin herkese açık erişilebilir olduğundan emin olun |
| Olaylar eksik | Zaman aralığı çok dar | begin/end parametrelerini genişletin |
| Düşük teslim edilebilirlik | Alan adı itibarı | Alan adı istatistiklerini ve kimlik doğrulamasını kontrol edin |
Hata Ayıklama Modu
connectors: mailgun: debug: true log_level: verbose log_webhooks: true log_events: trueEn İyi Uygulamalar
- Gönderim alan adlarını doğrulayın - Optimal teslim edilebilirlik için DNS doğrulamasını tamamlayın
- Olaylar için webhook kullanın - Events API’yi sorgulamak yerine gerçek zamanlı webhook teslimatı
- Geri dönmeleri proaktif yönetin - Brevo’da sert geri dönmeleri hemen bastırın
- Mesajlarınızı etiketleyin - E-posta performansını kategorize etmek ve analiz etmek için etiketler kullanın
- Alan adı itibarını izleyin - Mailgun panosunda teslim edilebilirlik metriklerini takip edin
- E-posta doğrulaması kullanın - Brevo listelerine eklemeden önce adresleri doğrulayın
Güvenlik
- HTTP Basic Auth - API anahtarı Authorization başlığı üzerinden iletilir
- Webhook imzaları - HMAC-SHA256 imza doğrulaması
- Alan adı doğrulama - SPF, DKIM ve DMARC DNS kimlik doğrulaması
- IP beyaz listesi - Özel IP planları için mevcuttur
- TLS şifrelemesi - Tüm API uç noktaları HTTPS gerektirir
- Anahtar rotasyonu - Mailgun panosu üzerinden API anahtarlarını periyodik olarak rotasyona alın