API cho công cụ tự động
Tạo hộp thư, đọc thư và lấy mã xác minh bằng script. Công cụ đã viết cho mail-api v1 chỉ cần đổi base URL và API key.
https://webmail-cloudflare-api-key.replit.app/api/v1Xác thực
Gửi header Authorization: Bearer <API key>. Key có dạng mk_live_<12 hex>_<secret> và được tạo tại trang quản trị API keys. Header X-API-Key: <key> cũng được chấp nhận. Mỗi key có scopes và giới hạn số request mỗi phút.
Lỗi
Mọi lỗi đều trả JSON {"detail": "..."}.
Tham số mailbox_id
{mailbox_id} nhận UUID của hộp thư hoặc địa chỉ email đầy đủ. Với nguồn cục bộ và catch-all, địa chỉ chưa từng được tạo sẽ trả danh sách [], còn codes/wait chờ thư đầu tiên (hộp thư được tạo khi thư tới). Nguồn IMAP cần hộp thư đã tồn tại và được quản trị viên cấu hình kết nối thật.
Chọn nguồn IMAP hoặc cục bộ
Bốn API liệt kê thư, đọc thư, codes/latest và codes/wait nhận source=local|imap. Bỏ qua tham số này vẫn đọc nguồn cục bộ qua Worker như trước. Không tự chuyển nguồn khi IMAP lỗi. Cấu hình IMAP tại Quản trị → Đọc thư IMAP; API key không được xem mật khẩu hay sửa cấu hình. xmail chỉ nhận thư, không có API gửi thư.
Với IMAP, danh sách và mã xác minh nhận folder là đường dẫn thư mục chính xác, mặc định INBOX. Kết quả có source: "imap" và folder. Dùng nguyên id hoặc message_id trả về, mã hóa URL khi đưa vào đường dẫn: mã thư bao gồm hộp thư, thư mục, UIDVALIDITY và UID, không chỉ là UID. Lỗi 409 do UIDVALIDITY đổi yêu cầu lấy mã thư mới. Token hộp thư vẫn chỉ đọc được hộp thư của chính nó; quyền API key vẫn là messages:read hoặc codes:read tương ứng.
IMAP chỉ đọc, không đánh dấu đã đọc. API xét thông tin của tối đa 1.000 UID mới nhất khớp tìm kiếm người gửi/ngày, lọc chính xác sender và after rồi đọc tối đa 100 nội dung thư để trích mã, lọc length. Mã có thời điểm nhận INTERNALDATE mới nhất trong cửa sổ đó được chọn. Nếu chưa tìm được mã nhưng còn thư ngoài giới hạn, API trả 422 để bạn thu hẹp bộ lọc. Giới hạn 10 MiB/thư, 25 MiB/yêu cầu và 45 giây cho lượt đọc thường; giảm limit hoặc thu hẹp bộ lọc khi vượt giới hạn.
codes/wait giữ một kết nối, kiểm tra mỗi 3 giây và đóng ngay khi khách ngắt yêu cầu. timeout 1–60 giây tính cả bước kết nối. Tối đa 4 kết nối/hộp thư và 20 kết nối trên mỗi tiến trình, dùng chung với webmail; quá giới hạn trả 429. Hãy truyền after là thời điểm bắt đầu thao tác để tránh lấy mã cũ.
Lưu trữ thư
Mỗi thư cục bộ tự bị xoá 30 phút sau khi nhận, trừ khi chính thư đó được đánh dấu lưu (is_kept, nút Lưu thư trong webmail). Việc lưu áp dụng cho từng thư; không có tuỳ chọn lưu cho cả hộp thư hay tên miền. Mỗi thư có auto_delete_at (thời điểm sẽ xoá, hoặc null khi đã lưu). Sau khi bị xoá, thư trả về 404. Thư IMAP nằm trên máy chủ mail, không được sao chép vào kho cục bộ và không bị cơ chế 30 phút này xoá. API IMAP luôn trả auto_delete_at: null; is_kept: false không phải lệnh xoá hay cờ lưu trên máy chủ IMAP.
Endpoints
/mailboxesmailboxes:createTạo hộp thư. Body {domain?, prefix?, password?, expires_in?}. 201 trả về {id, domain_id, address, status, expires_at, created_at, password, recovery_key, access_token, token_expires_at}. 409 nếu địa chỉ đã tồn tại.
/mailboxes/{mailbox_id}mailboxes:readThông tin hộp thư kèm message_count, unread_count, last_message_at.
/mailboxes/{mailbox_id}/messages?limit=20messages:readDanh sách MessageSummary mới nhất trước (limit 1-100), mỗi thư kèm mã đã trích xuất, is_kept và auto_delete_at. Thêm source=imap&folder=INBOX để đọc nguồn IMAP.
/mailboxes/{mailbox_id}/messages/{message_id}messages:readMessageDetail gồm text_body, sanitized_html_body, codes, verification_links. Đọc mã thư IMAP phải kèm source=imap; thư mục đã nằm trong mã thư.
/mailboxes/{mailbox_id}/codes/latest?sender=&after=&length=codes:readTrả {code, confidence, context, message_id, sender_address, subject, received_at}; 404 nếu chưa có. sender = chuỗi con của địa chỉ gửi; after = thời điểm ISO-8601 hoặc unix giây; length = độ dài chính xác của mã.
/mailboxes/{mailbox_id}/codes/wait?timeout=30&sender=&after=&length=codes:readChờ tối đa timeout giây (1-60) rồi trả cùng body như latest, hoặc 408 khi hết thời gian. Mẹo: truyền after = thời điểm bạn kích hoạt email để không nhận mã cũ; đặt timeout của HTTP client lớn hơn timeout chờ.
Script đóng vai một hộp thư
POST /auth/mailbox/login với {email, password} trả về {access_token, token_type: "bearer", expires_at, mailbox}. Sau đó gọi GET /mailbox/me, GET /mailbox/me/messages, GET|DELETE /mailbox/me/messages/{message_id}, GET /mailbox/me/codes/latest với Authorization: Bearer <access_token>. Khôi phục: POST /auth/mailbox/recover với {email, recovery_key, new_password?}.
Để đọc IMAP bằng token này, gọi các đường dẫn /mailboxes/{địa chỉ của bạn}/…?source=imap ở trên. Các API /mailbox/me/messages cũ vẫn chỉ đọc thư cục bộ.