Ajukan akses awal

Masukkan nama depan serta email atau nomor telepon Anda. Kami akan menghubungi Anda dengan detail akses Tajo.

Konektor Mailgun

Hubungkan Mailgun ke Brevo melalui Tajo untuk menyatukan data email transaksional dan marketing Anda, menyinkronkan event pengiriman serta metrik keterlibatan, dan mengonsolidasikan infrastruktur email Anda ke dalam satu tampilan pelanggan.

Ikhtisar

PropertiNilai
PlatformMailgun (dari Sinch)
KategoriEmail marketing
Kompleksitas setupMudah
Integrasi resmiTidak
Data yang disinkronkanEvent, kontak, deliverability, kampanye
Metode autentikasiAPI key (HTTP Basic Auth)

Fitur

  • Sinkronisasi event pengiriman - Lacak event delivered, bounced, opened, dan clicked
  • Metrik keterlibatan - Sinkronkan open rate dan click rate ke atribut kontak Brevo
  • Pengelolaan bounce - Otomatis menekan alamat yang bounce di Brevo
  • Penanganan keluhan - Sinkronkan keluhan spam untuk menjaga higienitas daftar
  • Reputasi domain - Pantau kesehatan domain pengirim dan deliverability
  • Pelacakan email transaksional - Korelasikan pengiriman transaksional dengan data marketing

Prasyarat

Sebelum memulai, pastikan Anda memiliki:

  1. Akun Mailgun dengan domain pengirim yang terverifikasi
  2. API key Mailgun dari Mailgun Dashboard
  3. Akun Brevo dengan akses API
  4. Akun Tajo dengan izin konektor

Autentikasi

Autentikasi API key

Mailgun memakai HTTP Basic Authentication dengan api sebagai username dan API key Anda sebagai 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' ...

Tipe API key

Mailgun menyediakan sending key khusus domain dan API key tingkat akun. Gunakan sending key domain untuk operasi pesan dan API key akun untuk operasi pengelolaan.

Konfigurasi

Setup dasar

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

Pemetaan field

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

EndpointMethodDeskripsi
https://api.mailgun.net/v3/{domain}/messagesPOSTMengirim pesan email
https://api.mailgun.net/v3/{domain}/eventsGETMengueri log event
https://api.mailgun.net/v3/{domain}/bouncesGETMenampilkan bounce
https://api.mailgun.net/v3/{domain}/complaintsGETMenampilkan keluhan
https://api.mailgun.net/v3/{domain}/unsubscribesGETMenampilkan unsubscribe
https://api.mailgun.net/v3/{domain}/tagsGETMenampilkan tag
https://api.mailgun.net/v3/{domain}/tags/{tag}/statsGETMengambil statistik tag
https://api.mailgun.net/v3/listsGETMenampilkan mailing list
https://api.mailgun.net/v3/domainsGETMenampilkan domain
https://api.mailgun.net/v4/address/validatePOSTMemvalidasi alamat email

Region EU

Untuk akun Mailgun yang berbasis di EU, gunakan https://api.eu.mailgun.net alih-alih https://api.mailgun.net untuk seluruh endpoint API.

Contoh kode

Inisialisasi konektor

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

Mengirim pesan melalui 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.' }

Sinkronisasi event email ke 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
}

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

Sinkronisasi bounce dan keluhan

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

Batas rate

EndpointBatasCatatan
Messages APIBergantung paket100/jam (gratis), tanpa batas (berbayar)
Events APITidak ada batas eksplisitGunakan paginasi dengan maksimum 300 item
Validation APIBergantung paketBayar per validasi
WebhookReal-timeTidak ada batas rate pada pengiriman
Suppressions APITidak ada batas eksplisitBerlaku pembatasan rate standar

Batas pengiriman

Mailgun menerapkan batas pengiriman berdasarkan paket dan reputasi domain Anda. Domain baru dimulai dengan batas yang lebih rendah dan meningkat seiring membaiknya reputasi pengirim Anda. Pantau statistik domain Anda di dashboard Mailgun.

Pemecahan masalah

MasalahPenyebabSolusi
401 UnauthorizedAPI key tidak validPeriksa API key di dashboard Mailgun
Domain belum terverifikasiRecord DNS belum adaTambahkan record TXT, CNAME, dan MX yang dibutuhkan
Webhook tidak diterimaURL tidak dapat diaksesPastikan URL webhook dapat dijangkau publik
Event hilangRentang waktu terlalu sempitPerlebar parameter begin/end
Deliverability rendahReputasi domainPeriksa statistik domain dan autentikasinya

Mode debug

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

Praktik terbaik

  1. Verifikasi domain pengirim - Selesaikan verifikasi DNS demi deliverability optimal
  2. Gunakan webhook untuk event - Pengiriman webhook real-time lebih baik daripada polling Events API
  3. Tangani bounce secara proaktif - Tekan hard bounce segera di Brevo
  4. Beri tag pada pesan Anda - Gunakan tag untuk mengategorikan dan menganalisis performa email
  5. Pantau reputasi domain - Lacak metrik deliverability di dashboard Mailgun
  6. Gunakan validasi email - Validasi alamat sebelum menambahkannya ke daftar Brevo

Keamanan

  • HTTP Basic Auth - API key dikirim melalui header Authorization
  • Tanda tangan webhook - Verifikasi tanda tangan HMAC-SHA256
  • Verifikasi domain - Autentikasi DNS SPF, DKIM, dan DMARC
  • Whitelist IP - Tersedia untuk paket dedicated IP
  • Enkripsi TLS - Seluruh endpoint API mewajibkan HTTPS
  • Rotasi key - Rotasikan API key secara berkala melalui dashboard Mailgun

Sumber daya terkait

Ajukan akses awal

Masukkan nama depan serta email atau nomor telepon Anda. Kami akan menghubungi Anda dengan detail akses Tajo.

deteksi otomatis
Asisten AI

Halo! Tanyakan apa saja tentang dokumentasi.