Email Spam Tester

API

Ba lệnh gọi. Không cần khóa, không cần tài khoản, không cần đăng ký.

Đặt trước một địa chỉ, gửi thư mà bạn sắp gửi đến danh sách của mình, đọc báo cáo. Mọi thứ hiển thị trên trang đều có trong JSON, bao gồm điểm số, toàn bộ 41 lượt kiểm tra kèm bằng chứng và phần của tiêu chuẩn làm căn cứ cho từng kết quả.

100.000 báo cáo đầu tiên được miễn phí, không cần khóa và không cần tài khoản. Nếu bạn đang tích hợp một tác nhân thay vì một tập lệnh, máy chủ MCP phù hợp hơn so với việc thăm dò.

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.

  1. Đặ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.

  2. 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.

  3. 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ó.

Điều đó cũng có nghĩa là cần coi slug như mật khẩu. Báo cáo hiển thị dòng tiêu đề, người gửi, địa chỉ nhận thư trả lại và toàn bộ mã nguồn của thư cho bất kỳ ai nắm giữ liên kết.

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.

langNgô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.

Hãy thăm dò endpoint này thay vì báo cáo. analysis_status đạt checks_ready trước, và kế hoạch AI xuất hiện trong ai_status khoảng một phút sau, vì vậy bên gọi chỉ cần các kiểm tra tất định không phải chờ kế hoạch.

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.

Thư thô được xóa theo lịch riêng, sớm hơn báo cáo. Sau đó, điểm cuối này trả về lý do thay vì nội dung nguồn.

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_oursTừ 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_compatTừ 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.
subscoresCù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[].citationsNguồ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.
completeFalse 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_urlTrang 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.

passLượ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.
failSẽ làm giảm khả năng gửi thành công. Bị trừ nhiều điểm hơn.
bỏ quaKhô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ỗiChú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 đó.
404Khô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.
409Bạn đã cố thay đổi ngôn ngữ sau khi thư đã đến.
429Giớ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

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ả.

Lấy địa chỉ kiểm tra