Cho phép hệ thống khác gửi thư dưới danh nghĩa tên miền của Minh Trung — đơn hàng, thông báo, xác nhận, báo cáo tự động.
Xin khoá API từ quản trị viên (mục Cài đặt → Khoá API trong hộp thư). Thử kết nối trước khi gửi thật:
curl https://mail.tamiload.com/api/v1/ping \
-H "Authorization: Bearer KHOA_CUA_BAN"
{
"ok": true,
"ten_khoa": "Hệ thống đặt hàng Derma",
"mien_duoc_gui": ["dermatreatment.com.vn"],
"tran_ngay": 200,
"da_dung_hom_nay": 0,
"con_lai_hom_nay": 200
}
Mỗi yêu cầu phải mang khoá API, theo một trong hai cách:
Authorization: Bearer mtm_live_xxxxxxxxxxxx
X-API-Key: mtm_live_xxxxxxxxxxxx
Mỗi khoá bị giới hạn tên miền được phép đặt vào ô người gửi. Khoá cấp cho hệ thống
Derma chỉ gửi được từ @dermatreatment.com.vn, không mượn được tên miền khác.
POST https://mail.tamiload.com/api/v1/send
| Trường | Kiểu | Bắt buộc | Ý nghĩa |
|---|---|---|---|
from | chuỗi | Có | Địa chỉ người gửi. Tên miền phải nằm trong phạm vi của khoá. |
fromName | chuỗi | Không | Tên hiển thị của người gửi. |
to | chuỗi hoặc mảng | Có | Người nhận. Nhiều địa chỉ thì cách nhau bằng dấu phẩy, hoặc truyền mảng. |
cc, bcc | chuỗi hoặc mảng | Không | bcc không xuất hiện trong thư người nhận thấy. |
replyTo | chuỗi | Không | Địa chỉ nhận thư trả lời, nếu khác người gửi. |
subject | chuỗi | Có | Tiêu đề. Có dấu tiếng Việt được. |
html | chuỗi | Có ít nhất một | Nội dung dạng HTML. |
text | chuỗi | trong hai | Nội dung chữ trơn. Bỏ trống thì máy chủ tự sinh từ html. |
attachments | mảng | Không | Xem mục 4. |
inReplyTo,references | chuỗi | Không | Mã thư gốc, để thư này nối đúng mạch hội thoại bên máy người nhận. |
{
"ok": true,
"messageId": "<abc123@dermatreatment.com.vn>",
"id": "mub08fs1-u2glvqf7",
"con_lai_hom_nay": 199
}
messageId là mã thư theo chuẩn thư điện tử — lưu lại để sau này nối
hội thoại hoặc đối soát. id là mã trong hộp thư Minh Trung, dùng để tra lại ở mục
Đã gửi.
{
"ok": false,
"ma": "MIEN_CHUA_BAT",
"error": "Tên miền \"abc.com\" chưa bật gửi thư. Tên miền dùng được: ..."
}
Luôn có ma để máy đọc và rẽ nhánh, và error là câu
tiếng Việt để ghi nhật ký hoặc hiện cho người vận hành. Đừng bắt lỗi theo câu chữ —
câu chữ có thể sửa, còn ma thì giữ nguyên.
"attachments": [
{
"filename": "don-hang-12345.pdf",
"type": "application/pdf",
"content": "<nội dung tệp mã hoá base64>"
}
]
| Số tệp tối đa | 10 tệp mỗi thư |
| Tổng dung lượng | 4 MB (tính theo byte gốc, trước khi mã hoá base64) |
| Đuôi bị chặn | exe bat cmd com cpl scr msi jar vbs js ps1 sh dll lnk reg hta … |
| HTTP | Mã | Nghĩa & cách xử lý |
|---|---|---|
| 400 | JSON_HONG | Thân yêu cầu không phải JSON hợp lệ. |
| 400 | THIEU_NGUOI_NHAN | to rỗng hoặc không có địa chỉ hợp lệ. |
| 400 | THIEU_NGUOI_GUI | from không phải địa chỉ email. |
| 400 | THIEU_TIEU_DE | Thiếu subject. |
| 400 | THIEU_NOI_DUNG | Thiếu cả html lẫn text. |
| 400 | QUA_NHIEU_NGUOI_NHAN | Tổng to + cc + bcc vượt 60. |
| 400 | TEP_BI_CHAN | Tệp có đuôi nguy hiểm. |
| 400 | TEP_HONG | content không phải base64 hợp lệ. |
| 401 | THIEU_KHOA | Không gửi kèm khoá. |
| 401 | KHOA_SAI | Khoá không tồn tại. Kiểm tra lại, đừng thử lại vòng lặp. |
| 403 | KHOA_TAT | Khoá bị quản trị tắt. Liên hệ quản trị. |
| 403 | KHOA_KHONG_DUOC_MIEN | Khoá không được gửi từ tên miền đó. |
| 403 | MIEN_CHUA_BAT | Tên miền chưa bật gửi thư trên hệ thống. |
| 413 | TEP_QUA_NANG | Tệp đính kèm vượt 4 MB. |
| 429 | QUA_TRAN_NGAY | Hết lượt của khoá trong hôm nay. Chờ sang ngày mới. |
| 429 | QUA_TRAN_NHA_MANG | Chạm trần của Cloudflare. Thử lại sau vài phút. |
| 502 | GUI_THAT_BAI | Không gửi được. Thử lại có thể thành công. |
| 500 | LOI_MAY_CHU | Lỗi phía hệ thống. Thử lại có thể thành công. |
| Trần gửi mỗi khoá | Do quản trị đặt khi tạo khoá (mặc định 500 thư/ngày). Đếm lại từ 0 lúc nửa đêm giờ Việt Nam. |
| Người nhận mỗi thư | tối đa 50 ở to, tổng cả cc + bcc là 60 |
| Kích thước thư | Cloudflare chặn thư ra lớn hơn 5 MiB |
| Xác thực thư đi | Mọi thư đều được ký DKIM theo tên miền gửi, và có DMARC — nên vào hộp thư chính, không rơi vào thư rác |
Mọi thư gửi qua API đều được lưu vào mục Đã gửi của hộp thư Minh Trung, ghi rõ khoá nào đã gửi, để đối soát khi cần.
curl -X POST https://mail.tamiload.com/api/v1/send \
-H "Authorization: Bearer $MT_MAIL_KEY" \
-H "Content-Type: application/json" \
-d '{
"from": "donhang@dermatreatment.com.vn",
"fromName": "Derma - Đơn hàng",
"to": "khach@vidu.com",
"subject": "Đơn hàng #12345 đã được xác nhận",
"html": "<p>Cảm ơn anh/chị đã đặt hàng.</p>"
}'
const res = await fetch('https://mail.tamiload.com/api/v1/send', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.MT_MAIL_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
from: 'donhang@dermatreatment.com.vn',
fromName: 'Derma - Đơn hàng',
to: 'khach@vidu.com',
subject: 'Đơn hàng #12345 đã được xác nhận',
html: '<p>Cảm ơn anh/chị đã đặt hàng.</p>',
}),
});
const kq = await res.json();
if (!kq.ok) throw new Error(`${kq.ma}: ${kq.error}`);
console.log('Đã gửi:', kq.messageId);
$than = json_encode([
'from' => 'donhang@dermatreatment.com.vn',
'to' => 'khach@vidu.com',
'subject' => 'Đơn hàng #12345 đã được xác nhận',
'html' => '<p>Cảm ơn anh/chị đã đặt hàng.</p>',
], JSON_UNESCAPED_UNICODE);
$ch = curl_init('https://mail.tamiload.com/api/v1/send');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('MT_MAIL_KEY'),
'Content-Type: application/json',
],
CURLOPT_POSTFIELDS => $than,
]);
$kq = json_decode(curl_exec($ch), true);
if (empty($kq['ok'])) throw new Exception($kq['ma'] . ': ' . $kq['error']);
import os, requests
r = requests.post(
'https://mail.tamiload.com/api/v1/send',
headers={'Authorization': f"Bearer {os.environ['MT_MAIL_KEY']}"},
json={
'from': 'donhang@dermatreatment.com.vn',
'to': 'khach@vidu.com',
'subject': 'Đơn hàng #12345 đã được xác nhận',
'html': '<p>Cảm ơn anh/chị đã đặt hàng.</p>',
},
timeout=30,
)
kq = r.json()
if not kq.get('ok'):
raise RuntimeError(f"{kq['ma']}: {kq['error']}")
const fs = require('node:fs');
const tep = fs.readFileSync('don-hang-12345.pdf').toString('base64');
// … trong phần body:
attachments: [
{ filename: 'don-hang-12345.pdf', type: 'application/pdf', content: tep }
]
Hộp thư Minh Trung · quay lại hộp thư