Thử trong sandbox → Mọi endpoint đều có một nút để chạy endpoint đó trên dịch vụ trực tiếp. Không có thao tác nào ở đây cần khóa, vì vậy yêu cầu bạn gửi từ trang này là yêu cầu thực: yêu cầu đó giữ chỗ một địa chỉ thực và được tính.
Quy trình
Hai yêu cầu và một email. Lệnh gọi thứ ba chỉ cần thiết vì quá trình phân tích mất vài giây.
Đặt trước một địa chỉ
Gửi POST đến endpoint hộp thư đến. Bạn nhận lại một địa chỉ chỉ chấp nhận đúng một thư và hết hạn sau một giờ, cùng với slug dùng để định danh mọi thứ còn lại.
Gửi thư thực tế đến địa chỉ đó
Qua SMTP, từ nền tảng sẽ gửi chiến dịch. Một nửa số lượt kiểm tra đọc các header do nền tảng gửi của bạn thêm vào, vì vậy thư được soạn thủ công sẽ đo không đúng đối tượng.
Polling trạng thái, sau đó đọc báo cáo
Endpoint trạng thái chỉ có kích thước vài trăm byte và cho bạn biết liệu đã nên tải báo cáo đầy đủ hay chưa. Bản thân báo cáo dài đến vài nghìn dòng.
# 1. reserve a single-use address curl -sX POST 'https://email-spam-tester.com/api/v1/inbox?lang=en' { "address": "test-<slug>@t.email-spam-tester.com", "slug": "<slug>", "expires_at": "2026-01-01T12:00:00Z" }
# 2. send your message to that address, then poll curl -s 'https://email-spam-tester.com/api/v1/tests/<slug>/status' { "slug": "<slug>", "analysis_status": "checks_ready", "ai_status": "running", "checks_done": 39, "checks_total": 39 }
# 3. read the report once analysis_status is checks_ready curl -s 'https://email-spam-tester.com/api/v1/tests/<slug>' { "report_url": "https://email-spam-tester.com/t/<slug>", "score_ours": 86.4, "score_compat": 9.2, "subscores": {"auth": 100.0, "infra_spam": 78.1, "content": 92.0, "compliance": 75.0}, "complete": true, "checks": [ { "id": "auth.dmarc", "status": "warn", "title": "DMARC result", "summary": "DMARC passes, but the policy is p=none.", "weight_ours": -4.0, "evidence": {"policy": "none", "aligned": "dkim"}, "citations": {"standards": [{"title": "RFC 9989 §4.7", "quote": "..."}]} } ], "fixes": [ {"id": "dmarc-enforce", "gain_ours": 4.0, "gain_compat": 0.0, "fix": {"title": "Move DMARC to quarantine", "severity": "medium"}} ] }
Xác thực
Không có. Không cần yêu cầu khóa, không cần thiết lập header, không cần tạo tài khoản. Slug bạn nhận được chính là quyền truy cập: bất kỳ ai nắm giữ nó đều có thể đọc báo cáo đó, và không ai khác có thể đoán được nó.
Endpoint
Địa chỉ cơ sở https://email-spam-tester.com. Mọi phản hồi đều ở dạng JSON.
POST/api/v1/inbox
Giữ trước một địa chỉ dùng một lần. Cả hai tham số đều là tùy chọn.
| lang | Ngôn ngữ dùng để viết kế hoạch khắc phục và kết quả của từng kiểm tra, dưới dạng mã ISO. Được quyết định ngay lúc này vì thư đến qua SMTP vài phút sau và không chứa dấu hiệu nào về người đang chờ nó. Mã không xác định sẽ mặc định dùng tiếng Anh. |
| utm_source, utm_medium, utm_campaign | Được chuyển tiếp đến hệ thống phân tích của chúng tôi. Hữu ích nếu bạn đang đo lường tích hợp của mình. |
GET/api/v1/tests/{slug}/status
Ít tốn tài nguyên khi thăm dò. Trả về hai trường trạng thái và tiến độ của các kiểm tra, ngoài ra không có gì khác.
GET/api/v1/tests/{slug}
Toàn bộ báo cáo. Phản hồi 202 khi địa chỉ đã được giữ trước và chưa có thư nào đến, phản hồi 200 sau khi thư đến.
GET/api/v1/tests/{slug}/message
Thư chính xác như khi được gửi đến: mọi header theo thứ tự truyền trên đường dây, cả hai phần nội dung, danh sách tệp đính kèm và mã nguồn thô. Được truy xuất riêng vì báo cáo được thăm dò còn dữ liệu này có thể lên đến một megabyte.
PUT/api/v1/tests/{slug}/locale
Thay đổi ngôn ngữ của một lượt đặt chỗ chưa được sử dụng. Dành cho tác nhân biết được người dùng đọc ngôn ngữ nào sau khi tác nhân đã yêu cầu địa chỉ. Yêu cầu bị từ chối sau khi thư đã đến, vì lúc đó quá trình phân tích đang chạy.
GET/api/health
Kiểm tra trạng thái hoạt động. Không xác thực, không có tác dụng phụ.
Đọc báo cáo
Các trường chứa kết quả, theo thứ tự mà bạn có thể cần đến.
| score_ours | Từ 0 đến 100. Mô hình của chúng tôi. Xác thực và hạ tầng chiếm phần lớn trọng số, vì chúng quyết định khả năng gửi đến trước khi bộ lọc đọc nội dung thư. |
| score_compat | Từ 0 đến 10. Tái tạo con số theo kiểu SpamAssassin mà mọi người đã quen dùng để so sánh, nhờ đó báo cáo có thể được đối chiếu với những gì họ thấy ở nơi khác. |
| subscores | Cùng thang điểm từ 0 đến 100 cho từng phần: auth, infra_spam, content, compliance. |
| checks[] | Tất cả 41 mục, mỗi mục có trạng thái, kết luận trong một dòng, bằng chứng dùng để đưa ra kết luận và mức ảnh hưởng đến hai điểm số. |
| checks[].citations | Nguồn của phát hiện: phần tương ứng trong RFC, được trích dẫn nguyên văn, và trang nơi Google nêu yêu cầu riêng. Được tuyển chọn thủ công thay vì tạo tự động, nên có thể tin cậy. |
| fixes[] | Những nội dung cần thay đổi, theo thứ tự, cùng số điểm đạt được từ mỗi thay đổi. Mức tăng được tính bằng cách chấm lại báo cáo, không phải ước tính. |
| complete | False khi một lượt kiểm tra không thể chạy. Một mục chưa được kiểm tra không bao giờ được coi là đạt, vì vậy hãy xem điểm số là lạc quan cho đến khi giá trị này là true. |
| report_url | Trang dành cho người đọc. Hãy gửi trang đó cho người dùng thay vì một mớ JSON. |
Trạng thái
Một lượt kiểm tra có một trong năm trạng thái, và sự khác biệt giữa hai trạng thái trong số đó quan trọng hơn vẻ bề ngoài.
| pass | Lượt kiểm tra đã chạy và không phát hiện vấn đề nào. |
| warn | Đáng để khắc phục. Bị trừ điểm. |
| fail | Sẽ làm giảm khả năng gửi thành công. Bị trừ nhiều điểm hơn. |
| bỏ qua | Không áp dụng. Không có tệp đính kèm để quét, không có phần HTML để đánh giá. Không được tính là đạt. |
| lỗi | Chúng tôi không thể xác định. Bị loại khỏi điểm số và được gắn cờ, thay vì được tính là đạt. |
analysis_status lần lượt là received, analyzing, checks_ready, failed. ai_status lần lượt là pending, running, ready, fallback, error. Báo cáo xác định là báo cáo cuối cùng tại checks_ready; ai_status chỉ bổ sung kế hoạch.
Những gì có thể được trả về
| 202 | Địa chỉ đã được giữ trước và chưa có thư nào đến. Phần nội dung chứa địa chỉ, thời điểm hết hạn và ngôn ngữ, vì vậy bên gọi không tạo yêu cầu giữ trước vẫn có thể hiển thị thông tin đó. |
| 404 | Không có slug đó. Slug này chưa từng tồn tại hoặc yêu cầu giữ trước đã bị quên. |
| 410 | Địa chỉ đã hết hạn trước khi có thư đến. |
| 409 | Bạn đã cố thay đổi ngôn ngữ sau khi thư đã đến. |
| 429 | Giới hạn kiểm thử miễn phí cho địa chỉ của bạn. Hiện tại dịch vụ này không có giới hạn theo từng người; nếu giới hạn đó được thiết lập, phần nội dung sẽ cho biết khi nào giới hạn được đặt lại. |
Bốn điều cần biết
Mỗi địa chỉ một thư
Thư thứ hai sẽ bị từ chối. Báo cáo trước đó của bạn vẫn nguyên vẹn, đó chính là mục đích.
Một giờ để sử dụng
Địa chỉ hết hạn; báo cáo thì không. Liên kết báo cáo là vĩnh viễn, vì vậy liên kết được dán vào phiếu hỗ trợ vẫn tiếp tục hoạt động.
Gửi từ nền tảng
Kiểm tra một chiến dịch từ tài khoản cá nhân sẽ đo lường tài khoản đó. Hầu hết mọi nội dung trong phần xác thực đều liên quan đến hạ tầng gửi, không phải văn bản.
Kiểm tra lại sau khi sửa
Mức cải thiện dự kiến được tính riêng cho từng bản sửa lỗi và không cộng dồn. Báo cáo thứ hai mới là con số trung thực.
Dành cho máy
- /api/openapi.json Mô tả OpenAPI, được tạo từ cùng mã nguồn phục vụ API.
- /llms.txt, /llms-full.txt Bản đồ ngắn của trang web này dành cho các mô hình ngôn ngữ, theo quy ước llms.txt, và một phiên bản dài hơn chứa toàn bộ quy trình cùng các trường báo cáo trong một tệp.
- /mcp Máy chủ MCP có cùng khả năng và cơ chế chờ chặn, hiệu quả hơn việc thăm dò từ bên trong một mô hình.
- For agents Trang dành cho tác nhân: khi nào nên dùng công cụ này, cách phân biệt một bước kiểm tra bị bỏ qua với một bước kiểm tra đạt, và những phát hiện nào là bản ghi DNS mà con người phải thay đổi thay vì văn bản mà tác nhân có thể chỉnh sửa.
Trước tiên, hãy thử thủ công một lần
Quá trình này mất khoảng một phút và cho bạn thấy chính xác những gì JSON mô tả.