สรุปโดยย่อ
API ของ Brevo ช่วยให้คุณสามารถส่งอีเมลการตลาด อีเมลธุรกรรม และข้อความ SMS ได้ด้วยโปรแกรม คุณต้องยืนยันตัวตนด้วย API Key ส่งคำขอไปยัง api.brevo.com และใช้ Webhook เพื่อติดตามการนำส่งและการมีส่วนร่วม สำหรับการทดสอบ ให้ใช้ Apidog เพื่อตรวจสอบความถูกต้องของ Payload, ทดสอบตัวจัดการ Webhook และเพื่อให้แน่ใจว่าการผสานรวมของคุณจัดการการตีกลับและการยกเลิกการสมัครได้อย่างถูกต้อง
บทนำ
Brevo (เดิมชื่อ Sendinblue) ประมวลผลอีเมลนับล้านฉบับทุกวันสำหรับธุรกิจกว่า 500,000 แห่ง โดยจัดการแคมเปญการตลาด อีเมลธุรกรรม การตลาด SMS และเวิร์กโฟลว์อัตโนมัติ
API อีเมลดูเหมือนจะง่าย เพียงแค่ส่งข้อความก็เสร็จสิ้น แต่ระบบอีเมลที่ใช้งานจริงจำเป็นต้องจัดการกับการตีกลับ (Bounce), การร้องเรียนสแปม, การยกเลิกการสมัคร (Unsubscribe) และการกำหนดเวลาการส่ง Brevo จัดการความซับซ้อนเหล่านี้ให้คุณโดยที่คุณไม่ต้องทำเอง
API ครอบคลุมการใช้งานหลักสามกรณี:
- แคมเปญการตลาด - อีเมลจำนวนมากไปยังรายชื่อผู้ติดต่อ
- อีเมลธุรกรรม - การรีเซ็ตรหัสผ่าน, การยืนยันคำสั่งซื้อ, การแจ้งเตือน
- ข้อความ SMS - รหัสยืนยัน, การแจ้งเตือน, ข้อความการตลาด
การยืนยันตัวตนและการตั้งค่า
รับ API Key
- เข้าสู่ระบบ Brevo
- ไปที่ SMTP & API → API Keys
- สร้างคีย์ใหม่พร้อมสิทธิ์ที่เหมาะสม
- จัดเก็บไว้อย่างปลอดภัย
API Key จะอยู่ในส่วนหัว api-key:
curl -X GET "https://api.brevo.com/v3/account" \
-H "accept: application/json" \
-H "api-key: your-api-key-here"
Base URL ของ API
คำขอทั้งหมดจะส่งไปที่:
https://api.brevo.com/v3/
ข้อจำกัดด้านอัตรา (Rate limits)
Brevo จำกัดคำขอตามแผน:
- ฟรี: 300 คำขอ/นาที
- Starter: 600 คำขอ/นาที
- Business: 1200 คำขอ/นาที
ตรวจสอบส่วนหัว X-RateLimit-Remaining เพื่อติดตามการใช้งาน
การส่งอีเมลธุรกรรม
อีเมลธุรกรรมคือข้อความแต่ละฉบับที่ถูกทริกเกอร์โดยการกระทำของผู้ใช้ เช่น การรีเซ็ตรหัสผ่าน การยืนยันคำสั่งซื้อ อีเมลต้อนรับ
ส่งอีเมลง่ายๆ
curl -X POST "https://api.brevo.com/v3/smtp/email" \
-H "accept: application/json" \
-H "api-key: your-api-key" \
-H "content-type: application/json" \
-d '{
"sender": {
"name": "Your App",
"email": "noreply@yourapp.com"
},
"to": [
{
"email": "user@example.com",
"name": "John Doe"
}
],
"subject": "Welcome to Our Platform",
"htmlContent": "<html><body><h1>Welcome!</h1><p>Thanks for signing up.</p></body></html>",
"textContent": "Welcome! Thanks for signing up."
}'
การตอบสนอง:
{
"messageId": "<20260324123456.123456@relay.brevo.com>"
}
การใช้เทมเพลต
สร้างเทมเพลตในตัวแก้ไขแบบภาพของ Brevo จากนั้นส่งโดยใช้ ID:
curl -X POST "https://api.brevo.com/v3/smtp/email" \
-H "api-key: your-api-key" \
-H "content-type: application/json" \
-d '{
"templateId": 15,
"to": [
{
"email": "user@example.com",
"name": "John Doe"
}
],
"params": {
"name": "John",
"order_number": "ORD-12345",
"tracking_url": "https://tracking.example.com/ORD-12345"
}
}'
ตัวแปรในเทมเพลตใช้เครื่องหมายวงเล็บปีกกาคู่:
<p>Hi {{params.name}},</p>
<p>Your order {{params.order_number}} has shipped.</p>
<p><a href="{{params.tracking_url}}">Track your package</a></p>
ส่งพร้อมไฟล์แนบ
const response = await fetch('https://api.brevo.com/v3/smtp/email', {
method: 'POST',
headers: {
'api-key': process.env.BREVO_API_KEY,
'content-type': 'application/json'
},
body: JSON.stringify({
sender: { name: 'Your App', email: 'noreply@yourapp.com' },
to: [{ email: 'user@example.com' }],
subject: 'Your Invoice',
htmlContent: '<p>Please find your invoice attached.</p>',
attachment: [
{
name: 'invoice.pdf',
content: base64EncodedPdfContent
}
]
})
})
แคมเปญการตลาด
อีเมลการตลาดจะถูกส่งไปยังรายชื่อผู้ติดต่อ Brevo จัดการลิงก์ยกเลิกการสมัคร การตั้งเวลา และการวิเคราะห์
สร้างแคมเปญ
curl -X POST "https://api.brevo.com/v3/emailCampaigns" \
-H "api-key: your-api-key" \
-H "content-type: application/json" \
-d '{
"name": "March Newsletter",
"subject": "What'\''s New in March",
"sender": {
"name": "Your Brand",
"email": "newsletter@yourbrand.com"
},
"type": "classic",
"htmlContent": "<html><body>Newsletter content here...</body></html>",
"recipients": {
"listIds": [12, 15]
},
"scheduledAt": "2026-03-25T09:00:00+00:00"
}'
ส่งทันที
curl -X POST "https://api.brevo.com/v3/emailCampaigns/{campaignId}/sendNow" \
-H "api-key: your-api-key"
รับสถิติแคมเปญ
curl -X GET "https://api.brevo.com/v3/emailCampaigns/{campaignId}" \
-H "api-key: your-api-key"
การตอบสนองรวมถึง:
{
"statistics": {
"delivered": 4850,
"opened": 1455,
"clicked": 291,
"unsubscribed": 12,
"bounces": 150
}
}
การจัดการผู้ติดต่อ
ผู้ติดต่อคือบุคคลที่คุณส่งอีเมลถึง จัดระเบียบพวกเขาในรายการและเพิ่มคุณสมบัติที่กำหนดเอง
สร้างผู้ติดต่อ
curl -X POST "https://api.brevo.com/v3/contacts" \
-H "api-key: your-api-key" \
-H "content-type: application/json" \
-d '{
"email": "new.user@example.com",
"attributes": {
"FIRSTNAME": "Jane",
"LASTNAME": "Smith",
"PLAN": "premium"
},
"listIds": [12, 15],
"updateEnabled": true
}'
แฟล็ก updateEnabled: true จะอัปเดตผู้ติดต่อที่มีอยู่แทนที่จะเกิดข้อผิดพลาด
ดูรายละเอียดผู้ติดต่อ
curl -X GET "https://api.brevo.com/v3/contacts/user@example.com" \
-H "api-key: your-api-key"
เพิ่มเข้าในรายการ
curl -X POST "https://api.brevo.com/v3/contacts/lists/12/contacts/add" \
-H "api-key: your-api-key" \
-H "content-type: application/json" \
-d '{
"emails": ["user1@example.com", "user2@example.com"]
}'
ลบออกจากรายการ
curl -X DELETE "https://api.brevo.com/v3/contacts/lists/12/contacts/remove" \
-H "api-key: your-api-key" \
-H "content-type: application/json" \
-d '{
"emails": ["user@example.com"]
}'
ยกเลิกการสมัครของผู้ติดต่อ
curl -X PUT "https://api.brevo.com/v3/contacts/user@example.com" \
-H "api-key: your-api-key" \
-H "content-type: application/json" \
-d '{
"emailBlacklisted": true
}'
การตลาด SMS
Brevo ส่งข้อความ SMS ทั่วโลกผ่าน SMS API ของพวกเขา
ส่ง SMS
curl -X POST "https://api.brevo.com/v3/transactionalSMS/sms" \
-H "api-key: your-api-key" \
-H "content-type: application/json" \
-d '{
"sender": "YourApp",
"recipient": "+15551234567",
"content": "Your verification code is: 123456",
"type": "transactional"
}'
ส่ง SMS การตลาด
curl -X POST "https://api.brevo.com/v3/transactionalSMS/sms" \
-H "api-key: your-api-key" \
-H "content-type: application/json" \
-d '{
"sender": "YourBrand",
"recipient": "+15551234567",
"content": "Flash sale! 50% off today only. Reply STOP to unsubscribe.",
"type": "marketing"
}'
ดูสถิติ SMS
curl -X GET "https://api.brevo.com/v3/transactionalSMS/statistics?startDate=2026-03-01&endDate=2026-03-31" \
-H "api-key: your-api-key"
Webhooks สำหรับการติดตาม
Webhooks จะแจ้งเตือนแอปของคุณเกี่ยวกับเหตุการณ์อีเมล: นำส่งแล้ว, เปิดอ่านแล้ว, คลิกแล้ว, ตีกลับ, ยกเลิกการสมัคร
กำหนดค่า Webhooks
ในแดชบอร์ดของ Brevo: การตั้งค่า → Webhooks → เพิ่ม Webhook
เหตุการณ์ที่ต้องการติดตาม:
delivered- อีเมลถึงกล่องจดหมายopened- ผู้รับเปิดอีเมลclicked- ผู้รับคลิกลิงก์bounced- อีเมลตีกลับ (แบบ Hard หรือ Soft)spam- ถูกระบุว่าเป็นสแปมunsubscribed- ผู้รับยกเลิกการสมัคร
จัดการ Payload ของ Webhook
app.post('/webhooks/brevo', (req, res) => {
const event = req.body
switch (event.event) {
case 'delivered':
console.log(`Email ${event.messageId} delivered to ${event.email}`)
break
case 'opened':
console.log(`Email opened by ${event.email} at ${event.date}`)
break
case 'bounced':
console.log(`Bounce: ${event.email} - ${event.reason}`)
// ทำเครื่องหมายผู้ติดต่อว่าไม่ถูกต้อง
markContactBounced(event.email)
break
case 'spam':
console.log(`Spam complaint from ${event.email}`)
// ลบออกจากรายการทั้งหมด
removeFromAllLists(event.email)
break
case 'unsubscribed':
console.log(`Unsubscribed: ${event.email}`)
break
}
res.status(200).send('OK')
})
การทดสอบด้วย Apidog
API อีเมลมีโหมดความล้มเหลวที่ซับซ้อน คุณจำเป็นต้องทดสอบเทมเพลต การตีกลับ และ Webhook Apidog ช่วยคุณได้

1. การจำลองการส่งอีเมล
ในระหว่างการพัฒนา อย่าส่งอีเมลจริง จำลองการตอบสนอง:
pm.test('Email API accepts valid payload', () => {
const response = pm.response.json()
pm.expect(response).to.have.property('messageId')
pm.expect(response.messageId).to.match(/<.*@relay\.brevo\.com>/)
})

2. ทดสอบการจัดการ Webhook
สร้าง Payload Webhook จำลองใน Apidog:
{
"event": "bounced",
"email": "invalid@example.com",
"messageId": "<12345@relay.brevo.com>",
"reason": "hard_bounce",
"date": "2026-03-24T12:00:00Z",
"subject": "Welcome to Our Platform"
}
ส่งไปยัง Endpoint ของ Webhook ของคุณและตรวจสอบว่าโค้ดของคุณจัดการได้
3. ตรวจสอบความถูกต้องของเทมเพลต
จัดเก็บ Payload ของเทมเพลตและทดสอบว่าตัวแปรถูกแทนที่อย่างถูกต้อง:
pm.test('Template variables are valid', () => {
const payload = pm.request.body.toJSON()
pm.expect(payload.params).to.have.property('name')
pm.expect(payload.params).to.have.property('order_number')
})
4. การแยกสภาพแวดล้อม
# การพัฒนา
BREVO_API_KEY: xkeysib-dev-xxx
BREVO_SENDER: dev@yourapp.com
# การใช้งานจริง
BREVO_API_KEY: xkeysib-prod-xxx
BREVO_SENDER: noreply@yourapp.com
ทดสอบ Brevo email APIs ด้วย Apidog - ฟรี
ข้อผิดพลาดทั่วไปและการแก้ไข
400 Bad Request - ข้อมูลที่จำเป็นขาดหายไป
สาเหตุ: Payload ขาดข้อมูลที่จำเป็น
วิธีแก้ไข: ตรวจสอบข้อความแสดงข้อผิดพลาดสำหรับรายละเอียดเฉพาะ:
{
"code": "invalid_parameter",
"message": "sender.email is required"
}
401 Unauthorized (ไม่ได้รับอนุญาต)
สาเหตุ: API Key ไม่ถูกต้องหรือขาดหายไป
วิธีแก้ไข: ตรวจสอบว่าส่วนหัว api-key ได้รับการตั้งค่าอย่างถูกต้อง ตรวจสอบว่าคีย์ยังไม่ถูกเพิกถอน
402 Payment Required (ต้องชำระเงิน)
สาเหตุ: บัญชีเกินขีดจำกัดหรือไม่มีเครดิต
วิธีแก้ไข:
- สำหรับอีเมล: ตรวจสอบขีดจำกัดอีเมลของแผนบริการของคุณ
- สำหรับ SMS: ซื้อเครดิต SMS
429 Too Many Requests (คำขอมากเกินไป)
สาเหตุ: เกินขีดจำกัดอัตรา
วิธีแก้ไข: ใช้ Exponential Backoff:
async function sendWithRetry(email, retries = 3) {
for (let i = 0; i < retries; i++) {
const response = await sendEmail(email)
if (response.status === 429) {
await sleep(Math.pow(2, i) * 1000)
} else {
return response
}
}
throw new Error('Rate limit exceeded')
}
404 Contact not found (ไม่พบผู้ติดต่อ)
สาเหตุ: พยายามอัปเดตผู้ติดต่อที่ไม่มีอยู่
วิธีแก้ไข: ใช้ updateEnabled: true เมื่อสร้างผู้ติดต่อ:
{
"email": "new@example.com",
"updateEnabled": true
}
สิ่งนี้จะสร้างหรืออัปเดตผู้ติดต่อ
ทางเลือกและการเปรียบเทียบ
| คุณสมบัติ | Brevo | SendGrid | Mailchimp | Postmark |
|---|---|---|---|---|
| ราคา | ฟรี 300 อีเมล/วัน | ฟรี 100 อีเมล/วัน | ฟรี 500 อีเมล/เดือน | ฟรี 100 อีเมล/เดือน |
| อีเมลการตลาด | ใช่ | ใช่ | ใช่ | ไม่ |
| อีเมลธุรกรรม | ใช่ | ใช่ | จำกัด | ใช่ (เฉพาะทาง) |
| SMS | ใช่ | ไม่ | ไม่ | ไม่ |
| ระบบอัตโนมัติ | ใช่ | ใช่ | ใช่ | จำกัด |
| ตัวแก้ไขเทมเพลต | แบบภาพ + โค้ด | โค้ด | แบบภาพ | โค้ด |
Brevo โดดเด่นในด้านการรองรับอีเมลและ SMS แบบรวมในราคาที่แข่งขันได้
กรณีการใช้งานจริง
กระบวนการสั่งซื้อ E-commerce ร้านค้าออนไลน์ใช้ Brevo สำหรับ: การยืนยันคำสั่งซื้อ (ธุรกรรม), การแจ้งเตือนการจัดส่ง (ธุรกรรม), การกู้คืนรถเข็นที่ถูกละทิ้ง (ระบบการตลาดอัตโนมัติ) และโปรโมชันรายสัปดาห์ (แคมเปญการตลาด) ทั้งหมดนี้จากการผสานรวมเพียงครั้งเดียว
การเริ่มต้นใช้งาน SaaS เครื่องมือจัดการโครงการส่งอีเมลต้อนรับ การรีเซ็ตรหัสผ่าน และคำเชิญทีมผ่าน API ธุรกรรม อีเมลการตลาดจะประกาศคุณสมบัติใหม่แก่ผู้ใช้ที่เลือกรับ
การยืนยัน SMS แอปพลิเคชันฟินเทคใช้ SMS API ของ Brevo สำหรับรหัสยืนยันตัวตนแบบสองปัจจัย Endpoint SMS ธุรกรรมจะส่งรหัสภายในไม่กี่วินาที และ Webhook จะติดตามความล้มเหลวในการส่งสำหรับการลองใหม่
สรุป
สิ่งที่คุณได้เรียนรู้มีดังนี้:
- API ของ Brevo จัดการอีเมลการตลาด อีเมลธุรกรรม และ SMS
- ยืนยันตัวตนด้วยส่วนหัว
api-key - ใช้เทมเพลตสำหรับอีเมลที่สอดคล้องและบำรุงรักษาได้
- จัดการผู้ติดต่อและรายการสำหรับแคมเปญที่กำหนดเป้าหมาย
- Webhooks ติดตามการนำส่ง การเปิด การคลิก และการตีกลับ
- ทดสอบด้วย Apidog ก่อนส่งไปยังผู้ใช้จริง
ขั้นตอนต่อไปของคุณ:
- สร้างบัญชี Brevo และรับ API Key
- ส่งอีเมลธุรกรรมฉบับแรกของคุณ
- สร้างเทมเพลตในตัวแก้ไขแบบภาพ
- ตั้งค่าตัวจัดการ Webhook สำหรับการตีกลับและการยกเลิกการสมัคร
- ทดสอบด้วย Apidog ในระหว่างการพัฒนา
ทดสอบ Brevo email APIs ด้วย Apidog - ฟรี
คำถามที่พบบ่อย
Brevo และ Sendinblue ต่างกันอย่างไร?ผลิตภัณฑ์เดียวกัน ชื่อใหม่ Sendinblue เปลี่ยนชื่อเป็น Brevo ในปี 2023 API ยังคงใช้ api.brevo.com แต่คุณจะเห็นการอ้างอิง Sendinblue ในเอกสารเก่ากว่า
ฉันสามารถส่งอีเมลได้ฟรีกี่ฉบับ? 300 อีเมลต่อวันในแผนฟรี นั่นคือ 9,000 อีเมลต่อเดือน หากต้องการมากกว่านี้ ให้อัปเกรดเป็นแผนแบบชำระเงินเริ่มต้นที่ 25 ดอลลาร์ต่อเดือนสำหรับ 20,000 อีเมล
ฉันสามารถใช้ Brevo สำหรับอีเมลเย็น (Cold Emails) ได้หรือไม่?ในทางเทคนิคแล้วทำได้ แต่มีความเสี่ยง อีเมลเย็นมีอัตราการตีกลับและสแปมสูง Brevo ตรวจสอบชื่อเสียงผู้ส่ง อัตราการร้องเรียนสูงจะทำให้บัญชีถูกระงับ ควรอุ่นเครื่องโดเมนของคุณก่อนและปฏิบัติตามแนวทางปฏิบัติที่ดีที่สุดสำหรับการส่งอีเมล
ฉันจะจัดการกับการตีกลับของอีเมลได้อย่างไร?รอฟัง bounced webhooks การตีกลับแบบ Hard (อีเมลไม่ถูกต้อง) ควรกำจัดผู้ติดต่อออกอย่างถาวร การตีกลับแบบ Soft (กล่องจดหมายเต็ม, ปัญหาชั่วคราว) สามารถลองใหม่ได้ ติดตามอัตราการตีกลับ – หากเกิน 5% ชื่อเสียงผู้ส่งของคุณจะลดลง
อีเมลการตลาดและอีเมลธุรกรรมต่างกันอย่างไร?อีเมลธุรกรรมถูกทริกเกอร์โดยการกระทำของผู้ใช้ (การซื้อ, การลงทะเบียน) และส่งไปยังผู้รับคนเดียว อีเมลการตลาดเป็นแคมเปญที่ส่งไปยังผู้รับจำนวนมากพร้อมกัน Brevo แยกความแตกต่างเหล่านี้ออกไปเพื่อเหตุผลด้านการนำส่งและการปฏิบัติตามกฎระเบียบ
ฉันจะเพิ่มลิงก์ยกเลิกการสมัครได้อย่างไร?Brevo จะเพิ่มลิงก์ยกเลิกการสมัครลงในอีเมลการตลาดโดยอัตโนมัติ สำหรับอีเมลธุรกรรม ให้เพิ่มลิงก์ของคุณเอง:
<a href="{{ unsubscribe_url }}">Unsubscribe</a>
ฉันสามารถส่งอีเมลจากโดเมนของฉันเองได้หรือไม่?ได้ ตั้งค่าเรคคอร์ด SPF, DKIM และ DMARC Brevo จะให้ค่าเหล่านี้ใน การตั้งค่า → ผู้ส่งและ IP หากไม่มีการยืนยันตัวตนที่เหมาะสม อีเมลอาจถูกส่งไปยังกล่องสแปม
ฉันจะกำหนดเวลาอีเมลในโซนเวลาที่ระบุได้อย่างไร?ใช้พารามิเตอร์ scheduledAt พร้อมการประทับเวลา ISO 8601:
{
"scheduledAt": "2026-03-25T09:00:00-05:00"
}
จะเกิดอะไรขึ้นหากฉันถึงขีดจำกัดอัตรา (Rate Limit)?คุณจะได้รับข้อผิดพลาด 429 การตอบสนองจะรวมส่วนหัว X-RateLimit-Reset พร้อมจำนวนวินาทีก่อนที่จะรีเซ็ต ใช้วิธี Exponential Backoff หรือจัดคิวอีเมลไว้สำหรับส่งภายหลัง
