Email Spam Tester

API-et

Tre kall. Ingen nøkkel, ingen konto, ingen registrering.

Reserver en adresse, send meldingen du skulle til å sende til listen din, og les rapporten. Alt siden viser, finnes i JSON, inkludert poengsummen, alle de 41 kontrollene med dokumentasjonen deres og avsnittet i standarden som hvert funn bygger på.

De første 100 000 rapportene er gratis, uten nøkkel og uten konto. Hvis du setter opp en agent i stedet for et skript, passer MCP-serveren bedre enn polling.

Prøv det i sandkassen → Hvert endepunkt, med en knapp som kjører det mot den aktive tjenesten. Ingenting her krever en nøkkel, så en forespørsel du sender fra denne siden, er reell: Den reserverer en reell adresse og telles med.

Forløpet

To forespørsler og én e-post. Det tredje kallet er bare nødvendig fordi analysen tar noen sekunder.

  1. Reserver en adresse

    Send en POST-forespørsel til innboks-endepunktet. Du får tilbake en adresse som godtar nøyaktig én melding og utløper etter en time, samt sluggen som alt annet identifiseres med.

  2. Send den faktiske meldingen til den

    Over SMTP, fra plattformen som skal sende kampanjen. Halvparten av kontrollene leser meldingshoder som sendeplattformen din legger til, så en melding som er skrevet manuelt, måler feil ting.

  3. Spør etter status, og les deretter rapporten

    Status-endepunktet er på noen hundre byte og forteller deg om det er verdt å hente hele rapporten ennå. Selve rapporten består av flere tusen linjer.

# 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"}}
  ]
}

Autentisering

Det finnes ingen. Ingen nøkkel å be om, ingen header å angi, ingen konto å opprette. Sluggen du får tilbake, er tilgangen: Den som har den, kan lese rapporten, og ingen andre kan gjette den.

Det betyr også at en slug bør behandles som et passord. En rapport viser emnelinjen, avsenderen, returadressen og hele meldingskilden til alle som har lenken.

Endepunkter

Basisadresse https://email-spam-tester.com. Alt svarer med JSON.

POST/api/v1/inbox

Reserverer en engangsadresse. Begge parameterne er valgfrie.

langSpråket som utbedringsplanen og funnene for hver kontroll skal skrives på, som en ISO-kode. Dette avgjøres nå fordi meldingen kommer via SMTP noen minutter senere og ikke inneholder noen indikasjon på hvem som venter på den. En ukjent kode bruker engelsk som reserve.
utm_source, utm_medium, utm_campaignSendes videre til analyseløsningen vår. Nyttig hvis du måler din egen integrasjon.

GET/api/v1/tests/{slug}/status

Rimelig å polle. Returnerer de to statusfeltene og hvor langt kontrollene har kommet, og ingenting annet.

Poll dette i stedet for rapporten. analysis_status når checks_ready først, og KI-planen blir tilgjengelig under ai_status omtrent et minutt senere, slik at en klient som bare vil ha de deterministiske kontrollene, ikke trenger å vente på planen.

GET/api/v1/tests/{slug}

Hele rapporten. Svarer med 202 mens adressen er reservert og ingenting har kommet ennå, og med 200 når noe har kommet.

GET/api/v1/tests/{slug}/message

Meldingen nøyaktig slik den ble levert: alle headere i overføringsrekkefølge, begge meldingstekstene, vedleggslisten og råkilden. Hentes separat fordi rapporten polles, og denne kan bli opptil én megabyte.

Råmeldingen slettes etter sin egen tidsplan, tidligere enn rapporten. Etter det svarer dette endepunktet med årsaken i stedet for kilden.

PUT/api/v1/tests/{slug}/locale

Endrer språket for en reservasjon som ennå ikke er brukt. For en agent som finner ut hvilket språk brukeren leser etter at den allerede har bedt om adressen. Avvises når meldingen har ankommet, fordi analysen da kjører.

GET/api/health

Livssjekk. Ingen autentisering, ingen bivirkninger.

Lese rapporten

Feltene som inneholder svaret, i den rekkefølgen du sannsynligvis vil ha dem.

score_ours0 til 100. Vår modell. Autentisering og infrastruktur veier tyngst, fordi de avgjør levering før et filter leser et eneste ord av teksten.
score_compat0 til 10. Gjengir tallet i SpamAssassin-stil som folk allerede sammenligner med, slik at rapporten kan sammenlignes med det noen så et annet sted.
subscoresDen samme skalaen fra 0 til 100 per del: auth, infra_spam, content, compliance.
checks[]Alle 41, hver med en status, et funn på én linje, bevisgrunnlaget det ble avgjort ut fra, og utslaget det ga på de to poengsummene.
checks[].citationsHvor funnet kommer fra: delen av RFC-en, sitert ordrett, og siden der Google oppgir sitt eget krav. Kuratert manuelt i stedet for generert, slik at kildene er pålitelige.
fixes[]Hva som må endres, i riktig rekkefølge, med antall poeng hver endring er verdt. Gevinstene beregnes ved å beregne rapportens poengsum på nytt, ikke ved å anslå dem.
completeFalse når en kontroll ikke kunne kjøres. Et ukontrollert element er aldri godkjent, så betrakt poengsummen som optimistisk frem til dette er true.
report_urlDen lesbare siden. Gi den til en person i stedet for en vegg med JSON.

Statuser

En kontroll har én av fem statuser, og forskjellen mellom to av dem er viktigere enn den ser ut til.

passKontrollen ble kjørt og fant ingen feil.
warnVerdt å rette. Koster poeng.
failVil koste deg levering. Koster flere poeng.
hopp overVar ikke relevant. Ingen vedlegg å skanne, ingen HTML-del å vurdere. Ikke godkjent.
feilVi kunne ikke fastslå det. Utelatt fra poengsummen og merket, i stedet for å bli regnet som godkjent.

analysis_status går gjennom received, analyzing, checks_ready, failed. ai_status går gjennom pending, running, ready, fallback, error. Den deterministiske rapporten er endelig ved checks_ready; ai_status legger bare til planen.

Hva som kan returneres

202Adressen er reservert, og ingen melding har kommet. Brødteksten inneholder adressen, utløpstiden og språket, slik at en kallende klient som ikke opprettet reservasjonen, likevel kan vise den.
404Ingen slik slug. Den har aldri eksistert, eller reservasjonen ble glemt.
410Adressen utløp før en melding kom.
409Du prøvde å endre språket etter at meldingen allerede hadde kommet.
429Grensen for gratistester for adressen din. Det er ingen grense per person for denne tjenesten akkurat nå. Hvis en slik grense noen gang blir satt, angir brødteksten når den nullstilles.

Fire ting det er verdt å vite

Én melding per adresse

Den andre blir avvist. Den tidligere rapporten din forblir intakt, som er poenget.

Én time til å bruke den

Adressen utløper; rapporten gjør det ikke. Rapportlenker er permanente, så en lenke som limes inn i en sak, fortsetter å fungere.

Send fra plattformen

Testing av en kampanje fra en personlig konto måler den kontoen. Nesten alt i autentiseringsdelen handler om sendeinfrastrukturen, ikke teksten.

Test på nytt etter retting

De forventede forbedringene beregnes for én retting om gangen, og de kan ikke kombineres. Den andre rapporten gir det ærlige tallet.

For maskiner

Prøv én manuelt først

Det tar omtrent ett minutt og viser deg nøyaktig hva JSON beskriver.

Få en testadresse