---
title: "Mailgun Connector"
description: "คู่มือการผสานรวม Mailgun ฉบับสมบูรณ์สำหรับการซิงค์ข้อมูลการส่งอีเมล metrics engagement และเหตุการณ์ transactional email กับ Brevo ผ่าน Tajo"
url: https://tajo.io/th/docs/connectors/marketing/mailgun/
markdown: https://tajo.io/th/docs/connectors/marketing/mailgun.md
lang: th-TH
robots: noindex
---

ขอสิทธิ์ใช้งานล่วงหน้า

กรอกชื่อและที่อยู่อีเมลที่ทำงานของคุณ เราจะส่งลิงก์เพื่อยืนยันคำขอเข้าใช้งาน Tajo ทางอีเมล

# Mailgun Connector

สถานะตัวเชื่อม: วางแผนไว้ ยังไม่ได้สร้าง ปัจจุบัน Tajo ยังไม่ได้ใช้งานตัวเชื่อมนี้

| ฟิลด์ต้นทาง | ฟิลด์ปลายทาง | ค่าตัวอย่าง |
| --- | --- | --- |
| `record.id` | `source_id` | `record_1042` |
| `record.updated_at` | `updated_at` | `2026-10-18T08:00:00Z` |
| `record.value` | `value` | `sample_value` |

เชื่อมต่อ 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](https://app.mailgun.com/settings/api_security)
3. บัญชี Brevo ที่มีสิทธิ์เข้าถึง API
4. บัญชี Tajo ที่มีสิทธิ์ connector

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

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

Mailgun ใช้ HTTP Basic Authentication โดยใช้ `api` เป็น username และ API key ของคุณเป็น password:

```bash
# 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
```

```javascript
// 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 สำหรับการดำเนินการจัดการ

## การกำหนดค่า

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

```yaml
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
```

### การแมปฟิลด์

```yaml
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}/messages` | POST | ส่งข้อความอีเมล |
| `https://api.mailgun.net/v3/{domain}/events` | GET | Query บันทึกเหตุการณ์ |
| `https://api.mailgun.net/v3/{domain}/bounces` | GET | แสดงรายการ bounces |
| `https://api.mailgun.net/v3/{domain}/complaints` | GET | แสดงรายการการร้องเรียน |
| `https://api.mailgun.net/v3/{domain}/unsubscribes` | GET | แสดงรายการการยกเลิกสมัคร |
| `https://api.mailgun.net/v3/{domain}/tags` | GET | แสดงรายการ tags |
| `https://api.mailgun.net/v3/{domain}/tags/{tag}/stats` | GET | ดึงสถิติ tag |
| `https://api.mailgun.net/v3/lists` | GET | แสดงรายการ mailing lists |
| `https://api.mailgun.net/v3/domains` | GET | แสดงรายการ domains |
| `https://api.mailgun.net/v4/address/validate` | POST | ตรวจสอบที่อยู่อีเมล |

EU Region

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

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

### เริ่มต้น Connector

```javascript
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

```javascript
// Send an email using Mailgun's Messages API
const formData = new URLSearchParams();
formData.append('from', `Your App <noreply@${domain}>`);
formData.append('to', 'recipient@example.com');
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: '<message-id@domain.com>', message: 'Queued. Thank you.' }
```

### ซิงค์เหตุการณ์อีเมลไปยัง Brevo

```javascript
// 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

```javascript
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

```javascript
// 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 | ตามแผน | คิดค่าบริการต่อการตรวจสอบ |
| Webhooks | Real-time | ไม่มี rate limit ในการส่ง |
| Suppressions API | ไม่มีขีดจำกัดชัดเจน | ใช้ standard rate limiting |

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

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

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

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

### โหมด Debug

```yaml
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

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

- [Brevo Connector](https://tajo.io/th/docs/connectors/marketing/brevo)
- [Segment Connector](https://tajo.io/th/docs/connectors/custom/segment)
- [Customer Sync Skill](https://tajo.io/th/docs/skills/data-sync/customer-sync)
- [Mailgun API Documentation](https://documentation.mailgun.com/)
