TempMail MMO - API Docs Tài liệu tích hợp chính thức cho luồng mailbox tạm

Tổng quan API

API vận hành theo mô hình action-based, truy cập qua endpoint chung /ajax.php và tham số f. Dành cho các luồng tạo mailbox tạm, đồng bộ thư, đọc chi tiết email và quản lý dữ liệu thư.

Base: /ajax.php Health: /health Auth: sid_token

Bắt đầu nhanh

  • Bước 1: Gọi GET /ajax.php?f=get_domains để lấy danh sách domain.
  • Bước 2: Gọi POST /ajax.php?f=get_email_address để tạo session và email tạm.
  • Bước 3 (tùy chọn): Gọi POST /ajax.php?f=set_email_user để đổi username/domain theo ý muốn.
  • Bước 3b (tùy chọn): Gọi POST /ajax.php?f=open_email_address để mở lại mailbox cũ đã tồn tại.
  • Bước 4: Ưu tiên dùng mailbox event stream để nhận cập nhật realtime. Nếu cần polling fallback, gọi POST /ajax.php?f=get_email_list theo chu kỳ 15-30 giây.
  • Bước 5: Khi mở thư, gọi POST /ajax.php?f=fetch_email để lấy nội dung đầy đủ.
  • Bước 6: Nếu có tệp đính kèm, gọi POST /ajax.php?f=fetch_attachment để tải file.

Xác thực phiên

Sau khi gọi get_email_address thành công, hệ thống trả về sid_token. Token này bắt buộc cho các action liên quan mailbox.

Bảo mật: với các action POST, gửi sid_token trong tham số body. Không truyền sid_token trên query string URL.

Các response có mang ngữ cảnh session như get_email_address, set_email_user, open_email_addressget_email_list cũng trả thêm metadata phiên để client theo dõi hạn dùng của session.

Trường Bắt buộc Mô tả
sid_token Chuỗi 48 ký tự hex đại diện cho session đang hoạt động.
lang Không Ngôn ngữ gợi ý, hỗ trợ vi hoặc en.
Session meta trong JSON response Kiểu Mô tả
session_started_at number Unix timestamp (mili giây) thời điểm session được tạo.
session_expires_at number Unix timestamp (mili giây) thời điểm session hiện tại sẽ hết hạn.
session_ttl_minutes number TTL cấu hình của session theo phút.
mailbox_event_token string Token dùng cho mailbox event stream thời gian thực. Nếu chỉ poll inbox thì có thể bỏ qua.

Các action mailbox đọc/truy xuất như get_email_list, fetch_email, del_emailfetch_attachment cũng gửi metadata session mới nhất qua response header.

Response header Kiểu Mô tả
X-Session-Started-At number Unix timestamp (mili giây) thời điểm session được tạo.
X-Session-Expires-At number Unix timestamp (mili giây) thời điểm session được gia hạn gần nhất sẽ hết hạn.
X-Session-Ttl-Minutes number TTL session theo phút.
X-Mailbox-Event-Token string Mailbox event token mới nhất, nên đồng bộ lại nếu client dùng realtime mailbox events.

Mailbox Events

Nếu tool của bạn cần cập nhật inbox gần như realtime, nên mở SSE stream thay vì poll get_email_list liên tục. Event stream phù hợp cho luồng OTP, confirm email và đồng bộ danh sách thư khi mailbox có thay đổi.

GET /events/mailbox?token=MAILBOX_EVENT_TOKEN

Lấy mailbox_event_token từ JSON response hoặc header X-Mailbox-Event-Token của các action mailbox như get_email_address, set_email_user, open_email_addressget_email_list.

Kết nối này dùng chuẩn Server-Sent Events. Trình duyệt hoặc client SSE sẽ tự reconnect; server hiện gửi retry: 2000 để gợi ý reconnect sau 2 giây.

Tham số query Bắt buộc Mô tả
token mailbox_event_token của session mailbox hiện tại.
Event Khi nào gửi Payload chính
state Khi vừa kết nối hoặc khi watcher đổi trạng thái. email, connected, count, connected_folders, watched_folders, folders, ts, có thể có error.
changed Khi mailbox có thay đổi số lượng thư hoặc có thư mới. email, reason, connected, count, total_count, connected_folders, ts, có thể có prevCount, folder, path.
ping Keepalive định kỳ để giữ stream hoạt động. Giống state, thêm ping: true.
session_lost Khi session hết hạn hoặc token không còn khớp mailbox hiện tại. email, ts.
const sidToken = 'SID_TOKEN';
let mailboxEventToken = 'MAILBOX_EVENT_TOKEN';

async function refreshInbox() {
  const response = await fetch('/ajax.php?f=get_email_list', {
    method: 'POST',
    headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
    body: new URLSearchParams({ sid_token: sidToken, offset: '0' }),
  });
  const payload = await response.json();

  mailboxEventToken = payload.mailbox_event_token
    || response.headers.get('X-Mailbox-Event-Token')
    || mailboxEventToken;

  return payload;
}

const source = new EventSource(`/events/mailbox?token=${encodeURIComponent(mailboxEventToken)}`);

source.addEventListener('changed', async () => {
  await refreshInbox();
});

source.addEventListener('session_lost', () => {
  source.close();
  // Tạo lại session hoặc mở lại mailbox rồi lấy mailbox_event_token mới.
});

source.onerror = () => {
  // Nếu SSE bị gián đoạn lâu, fallback poll get_email_list mỗi 15-30 giây.
};

Khuyến nghị tích hợp: chỉ gọi get_email_list khi vừa mở mailbox, khi nhận event changed, hoặc khi SSE lỗi/không khả dụng. Không nên vừa giữ SSE vừa poll dày liên tục.

Lưu ý bảo mật: xem mailbox_event_token như credential tạm thời của mailbox hiện tại. Chỉ dùng qua HTTPS, không ghi full URL stream vào log hoặc analytics, không chia sẻ URL /events/mailbox?token=..., và khi nhận session_lost thì phải lấy token mới thay vì tiếp tục dùng token cũ.
Lỗi thường gặp: 401 khi token không hợp lệ hoặc session đã mất, 429 khi mở quá nhiều kết nối SSE từ cùng một IP, và 503 khi server event đang đầy tải.

Lấy danh sách domain

GET /ajax.php?f=get_domains

Trả về danh sách domain khả dụng, domain mặc định và thời điểm cập nhật catalog domain gần nhất.

{
  "domains": ["mailmmo.io.vn", "tempmailmmo.com"],
  "defaultDomain": "tempmailmmo.com",
  "domains_updated_at": 1710000000000
}
Schema response Kiểu Mô tả
domains string[] Danh sách domain khả dụng.
defaultDomain string Domain mặc định được chọn khi không chỉ định domain.
domains_updated_at number Unix timestamp (mili giây) của lần đồng bộ catalog domain gần nhất.

Tạo mailbox tạm hoặc lấy lại session

POST /ajax.php?f=get_email_address

Tạo mailbox mới, hoặc lấy lại session hiện tại nếu gửi sid_token hợp lệ trong tham số body.

Response cũng kèm catalog domain hiện tại để client có thể đồng bộ danh sách domain mà không cần gọi riêng get_domains.

Lưu ý: sid_token chỉ đại diện cho phiên truy cập tạm. Khi phiên hết hạn, mailbox không bị xóa ngay khỏi máy chủ và vẫn có thể mở lại bằng open_email_address nếu email hoặc domain đó còn tồn tại.

Tham số body Bắt buộc Mô tả
email_domain Không Domain mong muốn, nếu không có sẽ dùng defaultDomain.
lang Không Ngôn ngữ phiên, ví dụ vi hoặc en.
sid_token Không Gửi token cũ trong tham số body để lấy lại phiên nếu còn hiệu lực.
{
  "email_addr": "demo@tempmailmmo.com",
  "email_user": "demo123",
  "email_domain": "tempmailmmo.com",
  "sid_token": "0123456789abcdef0123456789abcdef0123456789abcdef",
  "alias": 0,
  "session_started_at": 1710000000000,
  "session_expires_at": 1710086400000,
  "session_ttl_minutes": 1440,
  "mailbox_event_token": "MAILBOX_EVENT_TOKEN",
  "domains": ["mailmmo.io.vn", "tempmailmmo.com"],
  "defaultDomain": "tempmailmmo.com",
  "domains_updated_at": 1710000000000
}
Schema response Kiểu Mô tả
email_addr string Địa chỉ email đầy đủ local@domain.
email_user string Phần local-part của email.
email_domain string Domain hiện tại của phiên.
sid_token string (48 hex) Token phiên dùng cho các action mailbox.
alias number Cờ tương thích, hiện trả 0.
session_started_at / session_expires_at / session_ttl_minutes / mailbox_event_tokenmixedNhóm session meta chuẩn. Xem mục Xác thực phiên.
domains / defaultDomain / domains_updated_atmixedCatalog domain mới nhất. Xem get_domains.

Lấy danh sách email

POST /ajax.php?f=get_email_list

Lấy danh sách email theo sid_token trong tham số body, hỗ trợ phân trang bằng offset.

Nên ưu tiên mailbox event stream cho cập nhật realtime. Chỉ dùng endpoint này để polling fallback, với chu kỳ khuyến nghị 15-30 giây thay vì poll dày liên tục.

Response cũng kèm catalog domain mới nhất để client đang hoạt động có thể đồng bộ ngay khi danh sách domain thay đổi.

Endpoint này đồng thời gia hạn session và trả cả session meta trong JSON response lẫn response header.

Tham số body Bắt buộc Mô tả
sid_token Token phiên đang hoạt động (gửi trong tham số body).
offset Không Vị trí bắt đầu lấy dữ liệu, mặc định là 0.
{
  "list": [],
  "count": 0,
  "session_started_at": 1710000000000,
  "session_expires_at": 1710086400000,
  "session_ttl_minutes": 1440,
  "mailbox_event_token": "MAILBOX_EVENT_TOKEN",
  "domains": ["mailmmo.io.vn", "tempmailmmo.com"],
  "defaultDomain": "tempmailmmo.com",
  "domains_updated_at": 1710000000000
}
Schema response Kiểu Mô tả
list object[] Danh sách email theo trang.
count number Số phần tử hiện có trong list.
session_started_at number Unix timestamp (mili giây) thời điểm session được tạo.
session_expires_at number Unix timestamp (mili giây) thời điểm session đã được gia hạn sẽ hết hạn.
session_ttl_minutes number TTL cấu hình của session theo phút.
mailbox_event_token string Mailbox event token mới nhất sau khi session được gia hạn.
domains string[] Danh sách domain khả dụng hiện tại.
defaultDomain string Domain mặc định hiện tại của hệ thống.
domains_updated_at number Unix timestamp (mili giây) của lần đồng bộ catalog domain gần nhất.
Schema item trong list[] Kiểu Mô tả
mail_idstringID thư (ví dụ 123 hoặc Junk:123).
mail_fromstringNgười gửi.
mail_subjectstringTiêu đề thư.
mail_excerptstringĐoạn trích ngắn nội dung.
mail_timestampstringUnix timestamp (giây) dạng chuỗi.
mail_readnumber1 = đã đọc, 0 = chưa đọc.
attachednumber1 = có tệp đính kèm, 0 = không.

Đặt username/domain theo ý muốn

POST /ajax.php?f=set_email_user

Cập nhật địa chỉ email theo username và domain chỉ định cho session hiện tại.

Nếu bật force_takeover và email mục tiêu đang do session khác giữ, API sẽ trả về session hiện đang sở hữu mailbox đó.

Tham số body Bắt buộc Mô tả
sid_token Token phiên đang hoạt động.
email_user Username 3-32 ký tự, chỉ gồm a-z, 0-9, dấu chấm, gạch dưới, gạch ngang.
email_domain Không Domain mục tiêu. Nếu không hợp lệ sẽ dùng domain mặc định.
force_takeover Không 1/true để takeover email mục tiêu nếu email đó đang bị session khác giữ.
lang Không Ngôn ngữ phiên, hỗ trợ vi hoặc en.
{
  "email_addr": "custom_name@tempmailmmo.com",
  "email_user": "custom_name",
  "email_domain": "tempmailmmo.com",
  "sid_token": "0123456789abcdef0123456789abcdef0123456789abcdef",
  "alias": 0,
  "session_started_at": 1710000000000,
  "session_expires_at": 1710086400000,
  "session_ttl_minutes": 1440,
  "mailbox_event_token": "MAILBOX_EVENT_TOKEN",
  "domains": ["mailmmo.io.vn", "tempmailmmo.com"],
  "defaultDomain": "tempmailmmo.com",
  "domains_updated_at": 1710000000000
}
Schema response Kiểu Mô tả
email_addrstringĐịa chỉ email mới sau khi cập nhật.
email_userstringUsername hiện tại.
email_domainstringDomain hiện tại.
sid_tokenstring (48 hex)Token phiên giữ nguyên.
aliasnumberCờ tương thích, hiện trả 0.
session_started_at / session_expires_at / session_ttl_minutes / mailbox_event_tokenmixedNhóm session meta chuẩn. Xem mục Xác thực phiên.
domains / defaultDomain / domains_updated_atmixedCatalog domain mới nhất. Xem get_domains.

Mở lại mailbox cũ đã tồn tại

POST /ajax.php?f=open_email_address

Mở lại một mailbox cũ theo địa chỉ đầy đủ local@domain để đọc thư trên mailbox đó.

Quan trọng: Endpoint này không tự tạo mailbox mới. Nếu mailbox đã bị xóa trên máy chủ hoặc domain không còn tồn tại trên máy chủ, API trả 404 MAILBOX_NOT_FOUND.

Response trả về dữ liệu session của mailbox đã mở lại, đồng thời kèm catalog domain mới nhất.

Tham số body Bắt buộc Mô tả
email_addr Địa chỉ mailbox cần mở lại, dạng test@tempmailmmo.com.
force_takeover Không 1/true để takeover nếu mailbox đang bị session khác giữ.
sid_token Không Token phiên hiện tại, dùng để ưu tiên resume/takeover đúng ngữ cảnh.
lang Không Ngôn ngữ phiên, hỗ trợ vi hoặc en.
{
  "email_addr": "old_mailbox@tempmailmmo.com",
  "email_user": "old_mailbox",
  "email_domain": "tempmailmmo.com",
  "sid_token": "0123456789abcdef0123456789abcdef0123456789abcdef",
  "alias": 0,
  "session_started_at": 1710000000000,
  "session_expires_at": 1710086400000,
  "session_ttl_minutes": 1440,
  "mailbox_event_token": "MAILBOX_EVENT_TOKEN",
  "domains": ["mailmmo.io.vn", "tempmailmmo.com"],
  "defaultDomain": "tempmailmmo.com",
  "domains_updated_at": 1710000000000
}
Schema response Kiểu Mô tả
email_addrstringĐịa chỉ mailbox đã mở lại.
email_userstringPhần local-part của mailbox đã mở lại.
email_domainstringDomain của mailbox đã mở lại.
sid_tokenstring (48 hex)Token phiên dùng cho các action mailbox.
aliasnumberCờ tương thích, hiện trả 0.
session_started_at / session_expires_at / session_ttl_minutes / mailbox_event_tokenmixedNhóm session meta chuẩn. Xem mục Xác thực phiên.
domains / defaultDomain / domains_updated_atmixedCatalog domain mới nhất. Xem get_domains.
Lỗi thường gặp HTTP Mô tả
Mailbox not found on server404Mailbox đã bị xóa hoặc không còn tồn tại trên máy chủ.
Email address is already in use by another session409Mailbox đang được session khác sử dụng và chưa bật takeover.

Lấy chi tiết email

POST /ajax.php?f=fetch_email

Trả về toàn bộ nội dung thư theo email_id, gồm body HTML và danh sách tệp đính kèm.

Response header cũng kèm session meta mới nhất. Xem mục Xác thực phiên để lấy các header X-Session-*X-Mailbox-Event-Token.

Tham số body Bắt buộc Mô tả
sid_token Token phiên đang hoạt động (gửi trong tham số body).
email_id Mã email lấy từ danh sách list mail_id.
{
  "mail_id": "123",
  "mail_from": "Example Sender <sender@tempmailmmo.com>",
  "mail_subject": "Your OTP",
  "mail_body": "<html>...</html>",
  "mail_timestamp": "1710000000",
  "mail_attachments": [
    {
      "name": "otp.pdf",
      "size": 20480,
      "type": "application/pdf"
    }
  ]
}
Schema response Kiểu Mô tả
mail_idstringID thư.
mail_fromstringNgười gửi.
mail_subjectstringTiêu đề thư.
mail_bodystring (HTML)Nội dung thư dạng HTML đã xử lý.
mail_timestampstringUnix timestamp (giây) dạng chuỗi.
mail_attachmentsobject[]Danh sách tệp đính kèm.
Schema item trong mail_attachments[] Kiểu Mô tả
namestringTên file.
sizenumberKích thước file (bytes).
typestringMIME type của file.

Tải tệp đính kèm

POST /ajax.php?f=fetch_attachment

Tải nhị phân tệp đính kèm từ một email cụ thể. API trả trực tiếp nội dung file.

Do response body là binary, metadata session mới nhất được gửi qua response header. Xem mục Xác thực phiên.

Tham số body Bắt buộc Mô tả
sid_token Token phiên đang hoạt động.
email_id Mã email lấy từ danh sách thư hoặc fetch_email.
file_name Tên file cần tải, khớp với trường name trong mail_attachments.
curl -X POST "https://your-domain.com/ajax.php?f=fetch_attachment" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  --data "sid_token=YOUR_SID_TOKEN&email_id=123&file_name=otp.pdf" \
  --output otp.pdf
Kết quả response Giá trị Mô tả
BodybinaryNội dung tệp đính kèm.
Content-Typeapplication/octet-streamKiểu nội dung tải về.
Content-DispositionattachmentÉp trình duyệt tải file.

Xóa email

POST /ajax.php?f=del_email

Xóa một email hoặc nhiều email theo danh sách id.

Endpoint này cũng gia hạn session và gửi session meta mới nhất qua response header. Xem mục Xác thực phiên.

Tham số body Bắt buộc Mô tả
sid_token Token phiên đang hoạt động (gửi trong tham số body).
email_id hoặc email_ids[] Không ID email cần xóa. Nếu bỏ trống, API trả deleted: 0.
{
  "deleted": 1
}
Schema response Kiểu Mô tả
deleted number Số email đã xóa thành công.

Giới hạn & lưu ý tích hợp

Hạng mục Giá trị Ghi chú
HTTP method cho action mailbox POST Các action mailbox dùng GET sẽ bị từ chối (405).
sid_token format 48 ký tự hex Ví dụ: 012345...abcdef.
offset 0 đến 1,000,000 Ngoài khoảng sẽ bị clamp theo server.
Kích thước trang list mail Tối đa 500 (mặc định 50) Phụ thuộc cấu hình server.
Số email_id cho del_email Tối đa 100 ID/request Server tự giới hạn để tránh lạm dụng.
Kích thước tệp đính kèm tải về Tối đa 5MB Vượt giới hạn trả 413.
Rate limit tổng Theo cấu hình máy chủ Vượt giới hạn trả 429 kèm Retry-After.
Rate limit tạo session Theo cấu hình máy chủ Áp dụng cho luồng tạo mailbox/session mới.
Mailbox đang hoạt động Theo cấu hình máy chủ Khi chạm ngưỡng, server có thể dọn session cũ để nhường chỗ cho session mới.
Thời gian sống của session Theo cấu hình máy chủ Dùng session_expires_at trong response để theo dõi thời điểm hết hạn thực tế.

Mã lỗi thường gặp

400Thiếu tham số, action không hợp lệ, hoặc format dữ liệu sai.
401sid_token không hợp lệ hoặc phiên đã hết hạn.
403Origin không được phép hoặc bị chặn theo policy bảo mật.
404Email hoặc tệp đính kèm không tồn tại.
405Gọi sai HTTP method cho action tương ứng.
409Email đã được session khác sử dụng.
413Tệp đính kèm quá lớn (vượt giới hạn server).
429Vượt giới hạn tần suất request, cần retry theo Retry-After.
500Lỗi xử lý nội bộ server.
502Dịch vụ upstream tạm thời không khả dụng.
503Service chưa được cấu hình đầy đủ (ví dụ thiếu domain).

Khuyến nghị: Bọc toàn bộ request bằng timeout 10-15 giây, retry backoff cho lỗi mạng, và tái tạo session khi nhận 401.

Riêng một số lỗi nghiệp vụ có thể kèm mã chi tiết, ví dụ: {"error":"Mailbox not found on server","code":"MAILBOX_NOT_FOUND"}.

Error mẫu theo endpoint

Tất cả lỗi trả về dạng JSON: {"error":"..."}. Phần dưới chỉ giữ các case hay gặp và có ngữ nghĩa riêng theo endpoint.

# get_email_list - thiếu sid_token
POST /ajax.php?f=get_email_list
=> HTTP 401
{"error":"Missing or invalid sid_token"}

# set_email_user - trùng email với session khác
POST /ajax.php?f=set_email_user
=> HTTP 409
{"error":"Email address is already in use by another session"}

# open_email_address - mailbox đã bị xóa trên máy chủ
POST /ajax.php?f=open_email_address
=> HTTP 404
{"error":"Mailbox not found on server","code":"MAILBOX_NOT_FOUND"}

Ví dụ cURL theo luồng

# 1) Tạo session
curl -X POST "https://your-domain.com/ajax.php?f=get_email_address" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  --data "email_domain=mailmmo.io.vn&lang=vi"

# 2) Lấy danh sách thư
curl -X POST "https://your-domain.com/ajax.php?f=get_email_list" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  --data "sid_token=YOUR_SID_TOKEN&offset=0"

# 2b) Mở lại mailbox cũ để đọc thư
curl -X POST "https://your-domain.com/ajax.php?f=open_email_address" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  --data "email_addr=oldbox@mailmmo.io.vn&force_takeover=1&lang=vi"

# 3) Lấy chi tiết một thư
curl -X POST "https://your-domain.com/ajax.php?f=fetch_email" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  --data "sid_token=YOUR_SID_TOKEN&email_id=123"

# 4) Xóa một thư
curl -X POST "https://your-domain.com/ajax.php?f=del_email" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  --data "sid_token=YOUR_SID_TOKEN&email_ids[]=123"