API Documentation

CMSNPA TempMail · REST API

Về trang chính

Đọc hộp thư tạm bằng REST API

API công khai, không cần API key, trả về JSON và cho phép gọi từ mọi tên miền (CORS mở). Dùng để tự động lấy OTP hoặc kiểm tra hộp thư từ script của bạn.

Base URL https://mail.cmsnpa.com Auth Không cần Định dạng JSON CORS * Mail tự xoá sau 30 phút

Endpoint

GET /api/messages Lấy danh sách mail của một địa chỉ
Tham sốKiểuMô tả
addrBẮT BUỘC string Địa chỉ cần đọc, ví dụ clonenpa@cmsnpa.com. Nếu bỏ phần @domain thì hệ thống tự thêm @cmsnpa.com. Hỗ trợ @cmsnpa.com@clonenpa.com.
t number Tuỳ chọn. Timestamp bất kỳ để tránh cache phía trình duyệt.
Request
GET https://mail.cmsnpa.com/api/messages?addr=clonenpa@cmsnpa.com
Response · 200 OK
{
  "ok": true,
  "address": "clonenpa@cmsnpa.com",
  "count": 1,
  "messages": [
    {
      "to":       "clonenpa@cmsnpa.com",
      "from":     "noreply@shopee.com",
      "subject":  "Mã xác nhận đăng ký",
      "body":     "Mã xác nhận của bạn là 482910.",
      "bodyHtml": "<html>...</html>",
      "otp":      "482910",
      "time":     1755500000000
    }
  ]
}
TrườngKiểuÝ nghĩa
okbooleanTrạng thái xử lý của request.
addressstringĐịa chỉ đã chuẩn hoá (chữ thường, đã ghép domain).
countnumberSố mail đang có trong hộp thư.
messagesarrayDanh sách mail, mới nhất đứng đầu.
messages[].otpstringMã OTP hệ thống tự dò ra. Chuỗi rỗng nếu không tìm thấy.
messages[].bodyHtmlstringHTML gốc đã lọc bỏ script. Rỗng nếu mail chỉ có text.
messages[].timenumberThời điểm nhận, tính bằng mili giây (Unix epoch).
Response · 400 Bad Request
{
  "ok": false,
  "error": "Missing addr",
  "example": "/api/messages?addr=test@cmsnpa.com"
}
Hộp thư không cần tạo trước. Cứ gọi API với tên bất kỳ, mail gửi tới đó sẽ xuất hiện ngay. Mỗi hộp giữ tối đa 30 mail và tự xoá sau 30 phút.

Ví dụ theo ngôn ngữ

# Lấy toàn bộ mail
curl "https://mail.cmsnpa.com/api/messages?addr=clonenpa@cmsnpa.com"

# Chỉ lấy OTP của mail mới nhất
curl -s "https://mail.cmsnpa.com/api/messages?addr=clonenpa@cmsnpa.com" | jq -r '.messages[0].otp'
async function getOtp(addr) {
  const res  = await fetch(`https://mail.cmsnpa.com/api/messages?addr=${addr}&t=${Date.now()}`);
  const data = await res.json();
  return data.messages?.[0]?.otp || "";
}

// Chờ tới khi có OTP (poll mỗi 3 giây)
async function waitOtp(addr, timeoutMs = 60000) {
  const end = Date.now() + timeoutMs;
  while (Date.now() < end) {
    const otp = await getOtp(addr);
    if (otp) return otp;
    await new Promise(r => setTimeout(r, 3000));
  }
  throw new Error("Hết thời gian chờ OTP");
}
import time, requests

def wait_otp(addr, timeout=60):
    end = time.time() + timeout
    while time.time() < end:
        r = requests.get("https://mail.cmsnpa.com/api/messages",
                         params={"addr": addr, "t": int(time.time() * 1000)})
        msgs = r.json().get("messages", [])
        if msgs and msgs[0]["otp"]:
            return msgs[0]["otp"]
        time.sleep(3)
    raise TimeoutError("Không nhận được OTP")

print(wait_otp("clonenpa@cmsnpa.com"))

Lưu ý khi dùng

Nên poll mỗi 3–5 giây

Giao diện web đang tự kiểm tra mỗi 5 giây. Gọi dày hơn cũng không giúp mail về sớm hơn.

Tránh cache

Thêm &t=<timestamp> vào URL để trình duyệt không trả kết quả cũ.

Địa chỉ không phân biệt hoa thường

ABC@cmsnpa.comabc@cmsnpa.com là cùng một hộp thư.

OTP có thể rỗng

Nếu mail không chứa dãy số nhận dạng được, hãy tự đọc body để xử lý.

Đã copy