স্যান্ডবক্সে চেষ্টা করুন → প্রতিটি এন্ডপয়েন্টের সঙ্গে একটি বোতাম রয়েছে, যা সেটিকে লাইভ সার্ভিসে চালায়। এখানে কোনো কিছুর জন্যই কী প্রয়োজন নেই, তাই এই পৃষ্ঠা থেকে পাঠানো আপনার অনুরোধটি বাস্তব: এটি একটি বাস্তব ঠিকানা সংরক্ষণ করে এবং এটি গণনায় ধরা হয়।
প্রক্রিয়া
দুটি অনুরোধ এবং একটি ইমেইল। তৃতীয় কলটি শুধু এ কারণে প্রয়োজন যে বিশ্লেষণে কয়েক সেকেন্ড সময় লাগে।
একটি ঠিকানা সংরক্ষণ করুন
ইনবক্স এন্ডপয়েন্টে POST করুন। আপনি এমন একটি ঠিকানা পাবেন যা ঠিক একটি বার্তা গ্রহণ করে এবং এক ঘণ্টার মধ্যে মেয়াদোত্তীর্ণ হয়, সঙ্গে পাবেন সেই স্লাগ যার ভিত্তিতে বাকি সবকিছু নির্ধারিত হয়।
এতে আসল বার্তাটি পাঠান
SMTP-এর মাধ্যমে, যে প্ল্যাটফর্ম থেকে ক্যাম্পেইনটি পাঠানো হবে সেখান থেকে। পরীক্ষাগুলোর অর্ধেক আপনার পাঠানোর প্ল্যাটফর্মের যোগ করা হেডার পড়ে, তাই হাতে তৈরি করা বার্তা ভুল বিষয় পরিমাপ করে।
স্ট্যাটাস পোল করুন, তারপর প্রতিবেদনটি পড়ুন
স্ট্যাটাস এন্ডপয়েন্টের আকার কয়েকশ বাইট এবং এটি আপনাকে জানায় পূর্ণ প্রতিবেদনটি এখন সংগ্রহ করা উপযুক্ত কি না। প্রতিবেদনটি নিজেই কয়েক হাজার লাইন দীর্ঘ।
# 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"}} ] }
প্রমাণীকরণ
কোনোটিই নেই। অনুরোধ করার জন্য কোনো কী নেই, সেট করার জন্য কোনো হেডার নেই, তৈরি করার জন্য কোনো অ্যাকাউন্ট নেই। আপনি যে স্লাগটি ফেরত পান সেটিই সক্ষমতা: যার কাছে এটি থাকবে সে ওই রিপোর্ট পড়তে পারবে, এবং অন্য কেউ এটি অনুমান করতে পারবে না।
এন্ডপয়েন্ট
মূল ঠিকানা https://email-spam-tester.com। সবকিছু JSON-এ উত্তর দেয়।
POST/api/v1/inbox
একবার ব্যবহারযোগ্য একটি ঠিকানা সংরক্ষণ করে। উভয় প্যারামিটারই ঐচ্ছিক।
| lang | ISO কোড হিসেবে যে ভাষায় সংশোধন পরিকল্পনা এবং প্রতিটি পরীক্ষার ফলাফল লেখা হবে। এটি এখনই নির্ধারিত হয়, কারণ বার্তাটি কয়েক মিনিট পরে SMTP-এর মাধ্যমে আসে এবং কে এটির জন্য অপেক্ষা করছে সে বিষয়ে কোনো ইঙ্গিত বহন করে না। অজানা কোড হলে ইংরেজি ব্যবহৃত হয়। |
| utm_source, utm_medium, utm_campaign | আমাদের অ্যানালিটিক্সে পাঠানো হয়। আপনি নিজের ইন্টিগ্রেশন পরিমাপ করলে এটি উপযোগী। |
GET/api/v1/tests/{slug}/status
বারবার পোল করা সাশ্রয়ী। দুটি স্ট্যাটাস ফিল্ড এবং পরীক্ষাগুলো কত দূর এগিয়েছে তা ফেরত দেয়, আর কিছু নয়।
GET/api/v1/tests/{slug}
সম্পূর্ণ রিপোর্ট। ঠিকানাটি সংরক্ষিত থাকা এবং তখনও কিছু না পৌঁছানো পর্যন্ত 202 দিয়ে উত্তর দেয়, পৌঁছানোর পর 200 দেয়।
GET/api/v1/tests/{slug}/message
বার্তাটি ঠিক যেভাবে ডেলিভার করা হয়েছিল: ওয়্যার ক্রমে প্রতিটি হেডার, উভয় বডি, সংযুক্তির তালিকা এবং র’ সোর্স। আলাদাভাবে আনা হয়, কারণ রিপোর্টটি পোল করা হয় এবং এটি এক মেগাবাইট পর্যন্ত হতে পারে।
PUT/api/v1/tests/{slug}/locale
এখনও ব্যবহার করা হয়নি এমন একটি reservation-এর ভাষা পরিবর্তন করে। এমন একটি agent-এর জন্য, যা ঠিকানা চাওয়ার পর জানতে পারে তার user কোন ভাষা পড়ে। বার্তাটি পৌঁছে গেলে প্রত্যাখ্যাত হয়, কারণ ততক্ষণে analysis চলতে থাকে।
GET/api/health
Liveness। কোনো authentication নেই, কোনো side effect নেই।
রিপোর্ট পড়া
যে field-গুলোতে উত্তর থাকে, সম্ভবত আপনি যে ক্রমে সেগুলো চান সেই ক্রমে।
| score_ours | 0 থেকে 100। আমাদের model। Authentication এবং infrastructure-এর ওজন সবচেয়ে বেশি, কারণ কোনো filter কপির একটি শব্দ পড়ার আগেই এগুলো delivery নির্ধারণ করে। |
| score_compat | 0 থেকে 10। লোকজন ইতিমধ্যে তুলনার জন্য ব্যবহার করে এমন SpamAssassin-ধাঁচের সংখ্যাটি পুনরুৎপাদন করে, যাতে রিপোর্টটি অন্য কোথাও কেউ যা দেখেছে তার সঙ্গে তুলনীয় হয়। |
| subscores | প্রতিটি section-এর জন্য একই 0 থেকে 100 scale: auth, infra_spam, content, compliance। |
| checks[] | সব ৪১টি, প্রতিটিতে একটি status, এক লাইনের finding, যে evidence-এর ভিত্তিতে সিদ্ধান্ত নেওয়া হয়েছে এবং দুই score-এ এর cost কত। |
| checks[].citations | ফাইন্ডিংটি কোথা থেকে এসেছে: RFC-এর সংশ্লিষ্ট অনুচ্ছেদ, হুবহু উদ্ধৃত, এবং যে পৃষ্ঠায় Google তার নিজস্ব প্রয়োজনীয়তা উল্লেখ করেছে। তৈরি না করে হাতে বাছাই করা হয়েছে, তাই এগুলোর ওপর নির্ভর করা যায়। |
| সমাধানগুলি[] | কী পরিবর্তন করতে হবে, ক্রমানুসারে, এবং প্রতিটি পরিবর্তনের জন্য কত পয়েন্ট পাওয়া যাবে। লাভ অনুমান করা হয় না, প্রতিবেদনটি পুনরায় স্কোর করে হিসাব করা হয়। |
| সম্পূর্ণ | কোনো পরীক্ষা চালানো না গেলে মিথ্যা। পরীক্ষা না করা কোনো আইটেম কখনোই উত্তীর্ণ নয়, তাই এটি সত্য না হওয়া পর্যন্ত স্কোরটিকে আশাবাদী ধরে নিন। |
| প্রতিবেদনের_url | মানুষের পড়ার উপযোগী পৃষ্ঠা। JSON-এর দেয়াল দেওয়ার পরিবর্তে এটি একজন ব্যক্তিকে দিন। |
স্ট্যাটাস
একটি পরীক্ষা পাঁচটি অবস্থার একটিতে থাকে, এবং সেগুলোর দুটির মধ্যে পার্থক্য যতটা মনে হয় তার চেয়ে বেশি গুরুত্বপূর্ণ।
| উত্তীর্ণ | পরীক্ষাটি চালানো হয়েছে এবং কোনো সমস্যা পাওয়া যায়নি। |
| সতর্কতা | সমাধান করা উচিত। পয়েন্ট কমায়। |
| ব্যর্থ | আপনার ডেলিভারি ক্ষতিগ্রস্ত হবে। বেশি পয়েন্ট কাটবে। |
| এড়িয়ে যাওয়া | প্রযোজ্য হয়নি। স্ক্যান করার মতো কোনো অ্যাটাচমেন্ট নেই, ওজন করার মতো কোনো HTML অংশ নেই। এটি পাস নয়। |
| ত্রুটি | আমরা নির্ধারণ করতে পারিনি। পাস হিসেবে গণনা না করে, স্কোর থেকে বাদ দেওয়া হয়েছে এবং ফ্ল্যাগ করা হয়েছে। |
analysis_status-এর মান received, analyzing, checks_ready, failed। ai_status-এর মান pending, running, ready, fallback, error। নির্ধারক প্রতিবেদনটি checks_ready-এ চূড়ান্ত হয়; ai_status শুধু পরিকল্পনাটি যোগ করে।
কী ফিরে আসতে পারে
| 202 | ঠিকানাটি সংরক্ষিত এবং কোনো message আসেনি। body-তে ঠিকানা, মেয়াদ শেষ হওয়ার সময় এবং ভাষা থাকে, তাই যে caller reservation তৈরি করেনি, সেও এটি দেখাতে পারে। |
| 404 | এমন কোনো slug নেই। কখনোই ছিল না, অথবা reservation-টি ভুলে যাওয়া হয়েছে। |
| 410 | কোনো message আসার আগেই ঠিকানাটির মেয়াদ শেষ হয়েছে। |
| 409 | message ইতিমধ্যে আসার পরে আপনি ভাষা পরিবর্তন করার চেষ্টা করেছেন। |
| 429 | আপনার ঠিকানার জন্য বিনামূল্যের test-এর সীমা। এই service-এ বর্তমানে ব্যক্তি-পিছু কোনো সীমা নেই; ভবিষ্যতে কখনো এমন সীমা নির্ধারণ করা হলে, body-তে কখন সেটি reset হবে তা বলা থাকবে। |
জানার মতো চারটি বিষয়
প্রতি ঠিকানায় একটি বার্তা
দ্বিতীয়টি প্রত্যাখ্যান করা হয়। আপনার আগের প্রতিবেদন অক্ষত থাকে, সেটিই উদ্দেশ্য।
ব্যবহারের জন্য এক ঘণ্টা
ঠিকানাটির মেয়াদ শেষ হয়; প্রতিবেদনের হয় না। প্রতিবেদনের লিংক স্থায়ী, তাই টিকিটে পেস্ট করা লিংক কাজ করতে থাকে।
প্ল্যাটফর্ম থেকে পাঠান
ব্যক্তিগত অ্যাকাউন্ট থেকে কোনো ক্যাম্পেইন পরীক্ষা করলে সেই অ্যাকাউন্টেরই পরিমাপ হয়। প্রমাণীকরণ বিভাগের প্রায় সবকিছুই পাঠানোর অবকাঠামো সম্পর্কে, টেক্সট সম্পর্কে নয়।
সমাধানের পর আবার পরীক্ষা করুন
প্রত্যাশিত উন্নতি প্রতিবার একটি সমাধান ধরে গণনা করা হয় এবং সেগুলো একত্রে প্রযোজ্য নয়। দ্বিতীয় প্রতিবেদনটিই প্রকৃত সংখ্যা।
মেশিনের জন্য
- /api/openapi.json OpenAPI বিবরণ, যা API পরিবেশনকারী একই কোড থেকে তৈরি।
- /llms.txt, /llms-full.txt ভাষা মডেলগুলোর জন্য এই সাইটের একটি সংক্ষিপ্ত মানচিত্র, llms.txt রীতি অনুসারে, এবং একটি ফাইলে সম্পূর্ণ লুপ ও রিপোর্টের ফিল্ডসহ একটি দীর্ঘতর সংস্করণ।
- /mcp একই সক্ষমতা ও একটি ব্লকিং অপেক্ষাসহ একটি MCP সার্ভার, যা কোনো মডেলের ভেতর থেকে পোলিং করার চেয়ে কার্যকর।
- For agents এজেন্ট পৃষ্ঠা: কখন এটি ব্যবহার করতে হবে, পাস করা পরীক্ষার তুলনায় এড়িয়ে যাওয়া পরীক্ষা কীভাবে বুঝতে হবে, এবং কোন ফলাফলগুলো এমন DNS রেকর্ড যা একজন ব্যক্তিকে পরিবর্তন করতে হবে, কোনো এজেন্ট সম্পাদনা করতে পারে এমন টেক্সট নয়।
প্রথমে একটি হাতে করে দেখুন
এতে প্রায় এক মিনিট সময় লাগে এবং JSON ঠিক কী বর্ণনা করে তা আপনাকে দেখায়।