Mailgun Connector

เชื่อมต่อ Mailgun กับ Brevo ผ่าน Tajo เพื่อรวมข้อมูลอีเมล transactional และ marketing ซิงค์เหตุการณ์การส่งและ metrics engagement และรวมโครงสร้างพื้นฐานอีเมลของคุณเป็น customer view เดียว

ภาพรวม

คุณสมบัติค่า
แพลตฟอร์มMailgun (by Sinch)
หมวดหมู่Email Marketing
ความซับซ้อนในการตั้งค่าง่าย
การผสานรวมอย่างเป็นทางการไม่
ข้อมูลที่ซิงค์เหตุการณ์ ผู้ติดต่อ Deliverability แคมเปญ
วิธีการยืนยันตัวตนAPI Key (HTTP Basic Auth)

ฟีเจอร์

  • การซิงค์เหตุการณ์การส่ง - ติดตามเหตุการณ์ delivered, bounced, opened และ clicked
  • Engagement metrics - ซิงค์อัตราการเปิดและคลิกไปยัง Brevo contact attributes
  • การจัดการ Bounce - ระงับที่อยู่ที่ bounce โดยอัตโนมัติใน Brevo
  • การจัดการ Complaint - ซิงค์การร้องเรียน spam สำหรับการดูแล list
  • ชื่อเสียง Domain - ตรวจสอบสุขภาพของ sending domain และ deliverability
  • การติดตาม Transactional email - เชื่อมโยงการส่ง transactional กับข้อมูล marketing

ข้อกำหนดเบื้องต้น

ก่อนเริ่มต้น ตรวจสอบให้แน่ใจว่าคุณมี:

  1. บัญชี Mailgun ที่มี sending domain ที่ได้รับการยืนยัน
  2. Mailgun API key จาก Mailgun Dashboard
  3. บัญชี Brevo ที่มีสิทธิ์เข้าถึง API
  4. บัญชี Tajo ที่มีสิทธิ์ connector

การยืนยันตัวตน

การยืนยันตัวตนด้วย API Key

Mailgun ใช้ HTTP Basic Authentication โดยใช้ api เป็น username และ API key ของคุณเป็น 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' ...

ประเภท API Key

Mailgun มี domain-specific sending keys และ account-level API keys ใช้ domain sending keys สำหรับการดำเนินการข้อความ และ account API key สำหรับการดำเนินการจัดการ

การกำหนดค่า

การตั้งค่าพื้นฐาน

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_UNSUBSCRIBED

API Endpoints

Endpointเมธอดคำอธิบาย
https://api.mailgun.net/v3/{domain}/messagesPOSTส่งข้อความอีเมล
https://api.mailgun.net/v3/{domain}/eventsGETQuery บันทึกเหตุการณ์
https://api.mailgun.net/v3/{domain}/bouncesGETแสดงรายการ bounces
https://api.mailgun.net/v3/{domain}/complaintsGETแสดงรายการการร้องเรียน
https://api.mailgun.net/v3/{domain}/unsubscribesGETแสดงรายการการยกเลิกสมัคร
https://api.mailgun.net/v3/{domain}/tagsGETแสดงรายการ tags
https://api.mailgun.net/v3/{domain}/tags/{tag}/statsGETดึงสถิติ tag
https://api.mailgun.net/v3/listsGETแสดงรายการ mailing lists
https://api.mailgun.net/v3/domainsGETแสดงรายการ domains
https://api.mailgun.net/v4/address/validatePOSTตรวจสอบที่อยู่อีเมล

EU Region

สำหรับบัญชี Mailgun ที่ใช้ EU ใช้ https://api.eu.mailgun.net แทน https://api.mailgun.net สำหรับ API endpoints ทั้งหมด

ตัวอย่างโค้ด

เริ่มต้น Connector

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

ซิงค์เหตุการณ์อีเมลไปยัง 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
}

จัดการ Mailgun Webhooks

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

ซิงค์ Bounces และ Complaints

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

ขีดจำกัดอัตรา

Endpointขีดจำกัดหมายเหตุ
Messages APIขึ้นอยู่กับแผน100/ชั่วโมง (ฟรี), ไม่จำกัด (有料)
Events APIไม่มีขีดจำกัดชัดเจนใช้ pagination สูงสุด 300 รายการ
Validation APIตามแผนคิดค่าบริการต่อการตรวจสอบ
WebhooksReal-timeไม่มี rate limit ในการส่ง
Suppressions APIไม่มีขีดจำกัดชัดเจนใช้ standard rate limiting

ขีดจำกัดการส่ง

Mailgun บังคับใช้ขีดจำกัดการส่งตามแผนและชื่อเสียงของ domain ของคุณ Domains ใหม่เริ่มต้นด้วยขีดจำกัดที่ต่ำกว่าซึ่งเพิ่มขึ้นเมื่อชื่อเสียงผู้ส่งของคุณดีขึ้น ตรวจสอบสถิติ domain ของคุณใน Mailgun dashboard

การแก้ไขปัญหา

ปัญหาสาเหตุวิธีแก้
401 UnauthorizedAPI key ไม่ถูกต้องตรวจสอบ API key ใน Mailgun dashboard
Domain ไม่ได้รับการยืนยันDNS records หายไปเพิ่ม TXT, CNAME, MX records ที่จำเป็น
ไม่ได้รับ WebhookURL ไม่สามารถเข้าถึงได้ตรวจสอบว่า webhook URL สามารถเข้าถึงได้สาธารณะ
เหตุการณ์หายไปช่วงเวลาแคบเกินไปขยายพารามิเตอร์ begin/end
Deliverability ต่ำชื่อเสียง domainตรวจสอบสถิติ domain และการยืนยันตัวตน

โหมด Debug

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

แนวทางปฏิบัติที่ดีที่สุด

  1. ยืนยัน sending domains - ทำการยืนยัน DNS ให้สมบูรณ์เพื่อ deliverability ที่ดีที่สุด
  2. ใช้ webhooks สำหรับเหตุการณ์ - การส่ง webhook แบบ real-time แทนการ polling Events API
  3. จัดการ bounces เชิงรุก - ระงับ hard bounces ทันทีใน Brevo
  4. ติด tag ข้อความของคุณ - ใช้ tags เพื่อจัดหมวดหมู่และวิเคราะห์ประสิทธิภาพอีเมล
  5. ตรวจสอบชื่อเสียง domain - ติดตาม metrics deliverability ใน Mailgun dashboard
  6. ใช้การตรวจสอบอีเมล - ตรวจสอบที่อยู่ก่อนเพิ่มในรายการ Brevo

ความปลอดภัย

  • HTTP Basic Auth - API key ส่งผ่าน Authorization header
  • Webhook signatures - การตรวจสอบ HMAC-SHA256 signature
  • การยืนยัน Domain - การยืนยันตัวตน DNS ด้วย SPF, DKIM และ DMARC
  • IP whitelisting - มีให้สำหรับแผน dedicated IP
  • การเข้ารหัส TLS - API endpoints ทั้งหมดต้องการ HTTPS
  • Key rotation - หมุนเวียน API keys เป็นระยะผ่าน Mailgun dashboard

แหล่งข้อมูลที่เกี่ยวข้อง

Subscribe to updates

developer-docs

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

auto-detect
ผู้ช่วย AI

สวัสดี! ถามฉันเกี่ยวกับเอกสารได้เลย