Email Spam Tester

Roskaposti-API: sähköposti,
postilaatikko ja verkkotunnus

Lähetä meille yksi oikea viesti tai anna meille vain verkkotunnus. Kaikki vastaukset ovat JSON-muodossa.

Ei avainta, ei tiliä.

Pyyntö

# reserve a single-use address

$ curl -sX POST '.../api/v1/inbox?lang=en'

# send your message to that address, then

$ curl -s '.../api/v1/tests/k7m2x9qplw4tz8vn3b6c/status'

# read the report

$ curl -s '.../api/v1/tests/k7m2x9qplw4tz8vn3b6c'

Vastaus

200 OK

{
  "address": "test-k7m2x9qplw4tz8vn3b6c@t.email-spam-tester.com",
  "slug": "k7m2x9qplw4tz8vn3b6c",
  "expires_at": "2026-10-31T13:00:00Z"
}

200 OK

{
  "analysis_status": "checks_ready",
  "ai_status": "running",
  "checks_done": 42,
  "checks_total": 42
}

200 OK

{
  "score_ours": 86.4,
  "score_compat": 9.2,
  "subscores": {"auth": 100.0, "infra_spam": 78.1, "content": 92.0},
  "complete": true,
  "checks": [{"id": "auth.dmarc", "status": "warn"}],
  "fixes": [{"id": "dmarc-enforce", "gain_ours": 4.0}]
}

Pyyntö

# create a test

$ curl -sX POST '.../api/v1/placement' \ -d '{"public_results_accepted":true}'

# put the marker in the subject, send once to all, then

$ curl -s '.../api/v1/placement/wR3kP9xLq2vT8mZc'

Vastaus

201 Created

{
  "marker": "est-3f9a1c7e2b4d6a80c5e1f2d3",
  "status": "waiting",
  "results": [{"provider": "gmail", "placement": "pending"}],
  "fleet": {"status": "observing", "results": [
    {"provider": "yahoo", "placement": "pending"},
    {"provider": "outlook", "placement": "pending"}
  ]}
}

200 OK

{
  "status": "complete",
  "results": [{"provider": "gmail", "placement": "primary"}],
  "fleet": {"status": "finished", "results": [
    {"provider": "yahoo", "placement": "inbox"},
    {"provider": "outlook", "placement": "spam"}
  ]}
}

Pyyntö

# no email needed, one GET

$ curl -s '.../api/v1/infra/check?domain=example.com'

# compare with your last run

$ curl -s '.../api/v1/infra/check?domain=example.com&diff=true' \ | jq '.diff'

Vastaus

200 OK

{
  "domain": "example.com",
  "ok": false,
  "status": "fail",
  "score": 78,
  "coverage": {"answered": 7, "total": 8},
  "sections": {"ptr": {"status": "fail", "core": true}}
}

200 OK

{
  "changed": true,
  "worsened": true,
  "status_from": "pass",
  "score_from": 100,
  "changes": [{"path": "dkim.key.mail.sha256", "kind": "removed",
               "severity": "critical", "effect": "worsened"}]
}
Tällä sivulla

Sähköpostitesti

Luemme yhden oikean viestin alusta loppuun: sisällön, allekirjoituksen, otsakkeet ja sen lähettäneen palvelimen. Saat pistemäärän, korjausluettelon ja kaikki niiden taustalla olevat tarkistukset.

Pika-aloitus

Kolme kutsua. Ei avainta, tiliä eikä rekisteröitymistä. Kaksi pyyntöä ja yksi sähköposti. Kolmas kutsu tarvitaan vain siksi, että analyysi kestää muutaman sekunnin.

  1. Varaa osoite

    Lähetä POST-pyyntö inbox-päätepisteeseen. Saat osoitteen, joka hyväksyy täsmälleen yhden viestin ja vanhenee tunnissa, sekä tunnisteen, johon kaikki muu perustuu.

    Pyyntö

    # 1. reserve a single-use address
    curl -sX POST 'https://email-spam-tester.com/api/v1/inbox?lang=en'

    Vastaus

    {
      "address": "test-<slug>@t.email-spam-tester.com",
      "slug": "<slug>",
      "expires_at": "2026-01-01T12:00:00Z"
    }
  2. Lähetä oikea viesti siihen

    Lähetä se SMTP:n kautta alustalta, joka lähettää kampanjan. Puolet tarkistuksista lukee lähetysalustan lisäämiä otsakkeita, joten käsin laadittu viesti mittaa väärää asiaa.

    Pyyntö

    # 2. send your message to that address, from your own platform
    To: test-<slug>@t.email-spam-tester.com
  3. Kysy tilaa ja lue sitten raportti

    Tilapäätepisteen vastaus on muutaman sadan tavun kokoinen ja kertoo, kannattaako koko raportti jo hakea. Itse raportti on useita tuhansia rivejä pitkä.

    Pyyntö

    # 3. poll
    curl -s 'https://email-spam-tester.com/api/v1/tests/<slug>/status'

    Vastaus

    {
      "slug": "<slug>",
      "analysis_status": "checks_ready",
      "ai_status": "running",
      "checks_done": 42,
      "checks_total": 42
    }

    Pyyntö

    # 4. read the report once analysis_status is checks_ready
    curl -s 'https://email-spam-tester.com/api/v1/tests/<slug>'

    Vastaus

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

Varaa osoite, lähetä viesti, jonka olit aikeissa lähettää listallesi, ja lue raportti. Kaikki sivulla näkyvä on JSON-vastauksessa, mukaan lukien pisteet, kaikki 42 tarkistusta todisteineen ja standardin kohta, johon kukin havainto perustuu.

Ensimmäiset 100 000 raporttia ovat ilmaisia, eikä avainta tai tiliä tarvita. Jos integroit agenttia komentosarjan sijaan, MCP-palvelin sopii paremmin kuin toistuva kysely.

Päätepisteet

Perusosoite https://email-spam-tester.com. Kaikki vastaukset ovat JSON-muodossa.

POST/api/v1/inbox

Varaa kertakäyttöisen osoitteen. Molemmat parametrit ovat valinnaisia.

langKieli, jolla korjaussuunnitelma ja tarkistuskohtaiset havainnot kirjoitetaan, ISO-koodina. Tämä päätetään nyt, koska viesti saapuu SMTP:n kautta minuutteja myöhemmin eikä sisällä tietoa siitä, kuka sitä odottaa. Tuntemattoman koodin tapauksessa käytetään englantia.
utm_source, utm_medium, utm_campaignVälitetään analytiikkaamme. Hyödyllinen, jos mittaat omaa integraatiotasi.

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

Kevyt pollata. Palauttaa kaksi tilakenttää ja tarkistusten etenemisen, eikä mitään muuta.

Pollaa tätä raportin sijaan. analysis_status saavuttaa ensin tilan checks_ready, ja AI-suunnitelma tulee ai_status-kenttään noin minuuttia myöhemmin, joten pelkät deterministiset tarkistukset haluavan kutsujan ei tarvitse odottaa suunnitelmaa.

GET/api/v1/tests/{slug}

Koko raportti. Palauttaa 202, kun osoite on varattu eikä mitään ole vielä saapunut, ja 200, kun viesti on saapunut.

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

Viesti täsmälleen toimitetussa muodossa: kaikki otsakkeet siirtojärjestyksessä, molemmat viestirungot, liiteluettelo ja raakalähde. Haetaan erikseen, koska raporttia pollataan ja tämän koko voi nousta megatavuun.

Raakaviesti poistetaan oman aikataulunsa mukaisesti ennen raporttia. Sen jälkeen tämä päätepiste vastaa syyllä lähdetietojen sijaan.

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

Vaihtaa sellaisen varauksen kielen, jota ei ole vielä käytetty. Tarkoitettu agentille, joka saa tietää käyttäjänsä lukeman kielen vasta pyydettyään jo osoitetta. Pyyntö hylätään viestin saavuttua, koska analyysi on silloin jo käynnissä.

Saapuneet-kansioon sijoittuminenBeta

Lähetä yksi viesti testipostilaatikoiden luetteloon ja katso, mihin se päätyi Gmailissa, Outlookissa, Yahoossa ja muilla palveluntarjoajilla: Saapuneet-, Tarjoukset- vai Roskaposti-kansioon.

Pika-aloitus

  1. Luo testi

    Tee POST-pyyntö placement-päätepisteeseen. Saat vastauksena tunnisteen ja testipostilaatikot.

    Pyyntö

    # 1. create a test
    curl -sX POST 'https://email-spam-tester.com/api/v1/placement' \
      -H 'Content-Type: application/json' \
      -d '{"public_results_accepted":true}'

    Vastaus

    {
      "slug": "<slug>",
      "marker": "est-3f9a1c7e2b4d6a80c5e1f2d3",
      "status": "waiting",
      "deadline": "2026-10-31T12:30:00Z",
      "poll_after_seconds": 60,
      "results": [
        {"address": "<seed>", "provider": "gmail", "kind": "Gmail",
         "placement": "pending", "observed_at": null}
      ],
      "fleet": {
        "status": "observing",
        "results": [
          {"address": "<mailbox>", "provider": "yahoo", "available": true,
           "placement": "pending", "coverage": "pending"}
        ]
      }
    }
  2. Lähetä yksi viesti jokaiseen postilaatikkoon

    Lisää tunniste aiheeseen ja lähetä viesti tavalliselta alustaltasi kaikkiin osoitteisiin yhdellä kertaa.

    Pyyntö

    # 2. one message to every address, with the marker in the subject
    Subject: October invoice est-3f9a1c7e2b4d6a80c5e1f2d3
    To: <seed>, <mailbox>, ...
  3. Kysele kansioita

    Jokaiselle osoitteelle täytetään sen palveluntarjoaja ja kansio. Kysele, kunnes tila ei enää ole waiting.

    Pyyntö

    # 3. poll for the folders
    curl -s 'https://email-spam-tester.com/api/v1/placement/<slug>'

    Vastaus

    {
      "status": "complete",
      "received": 2,
      "total": 2,
      "results": [
        {"address": "<seed>", "provider": "gmail", "kind": "Gmail",
         "placement": "primary", "observed_at": "2026-10-31T12:04:11Z"},
        {"address": "<seed>", "provider": "gmail", "kind": "Google Workspace",
         "placement": "promotions", "observed_at": "2026-10-31T12:04:11Z"}
      ],
      "fleet": {
        "status": "finished",
        "results": [
          {"address": "<mailbox>", "provider": "yahoo", "available": true,
           "placement": "inbox", "coverage": "ok"},
          {"address": "<mailbox>", "provider": "outlook", "available": true,
           "placement": "spam", "coverage": "ok"}
        ]
      }
    }

Päätepisteet

An optional test using public GMass seed inboxes and available project test mailboxes, alone or alongside the email score. Explain to the sender that GMass receives their email and publishes its subject, sender name and placement before creating a test. Use all test mailboxes for non-confidential test messages only.

GET /api/v1/placement/availability

Returns providers: the provider identifiers of currently healthy, admitted project mailboxes. No addresses or credentials are exposed. This read does not create a test or contact GMass. Actual recipients are allocated at creation and may differ as availability or capacity changes.

POST /api/v1/placement

Send JSON {"public_results_accepted":true}. Returns HTTP 201 with slug, marker, results (the seed addresses), deadline and expires_at. Limit: 20 tests per IP per UTC day.

For one-send combined testing, first reserve an email score address and include its score_slug in the placement creation JSON. Repeated creation for that score returns the same placement test. Send the marked email to the score address, every returned seed and every available fleet.results address; keep the main /t/<score_slug> report link. Creating a link after the score address was used or expired returns HTTP 409.

GET /api/v1/placement/by-score/{score_slug}

Read and refresh the placement run attached to the main email test. The response has the same format and polling limits as the standalone endpoint below. HTTP 404 means placement was not included or its stored results have been removed.

GET /api/v1/placement/{slug}

Use poll_after_seconds (normally 60 seconds) while the page is open. Upstream errors trigger a shared cooldown. Add the marker to the subject and send through the sender's normal platform to every seed. Observations are saved for 30 days. Collection ends after 30 minutes or when all seeds have results.

status: waiting, complete or timed_out. Each result has an address, provider, kind, placement and observed_at. Placement is primary, promotions, inbox, updates, social, forums, spam, unknown, pending or not_observed. Missing results do not mean Spam; Promotions is an inbox category. provider_error indicates an upstream outage without discarding saved observations. HTTP 404 means unknown, 410 expired, 429 quota exhausted, and 503 no test inboxes available at creation.

The optional fleet object contains independently collected project mailbox results, with status observing, settling or finished. Refresh every 30 seconds until it finishes, even when Gmail has completed. Each fleet result includes address, provider, available, placement, category and coverage. Exclude unavailable addresses from new sends; retain their saved observations. Category data may be unavailable even when the physical folder is known.

If GMass is unavailable at creation but project mailboxes can be allocated, provider is fleet and the top-level seed results are empty. Use fleet.results; do not interpret an empty Gmail list as successful delivery. Existing runs never gain new recipient addresses silently.

Infrastruktuurin tarkistus

Yksi GET-pyyntö tarkistaa verkkotunnuksen sähköpostimääritykset lähettämättä mitään, säilyttää tuloksen ja kertoo, mikä on muuttunut edellisen suorituksesi jälkeen. Avainta ei tarvita. cronissa alla oleva rivi palauttaa nollasta poikkeavan poistumiskoodin, kun verkkotunnus on virheellinen tai sen määritykset ovat muuttuneet merkityksellisellä tavalla.

Pika-aloitus

  1. Tee yksi GET-pyyntö

    Anna verkkotunnus. ip lisää lähetysosoitteesi, ja selector nimeää luettavat DKIM-valitsimet.

    Pyyntö

    curl -s 'https://email-spam-tester.com/api/v1/infra/check?domain=example.com&selector=mail&diff=true'
  2. Lue tulos

    ok on vastaus skriptille, ja sections näyttää, mikä osa epäonnistui.

    Vastaus

    {
      "id": "ir_01JB8Y4T2M6K9QZ7H3V5N1XWDA",
      "domain": "example.com",
      "checked_at": "2026-10-31T12:00:00Z",
      "ok": false,
      "status": "fail",
      "score": 78,
      "coverage": {"answered": 7, "total": 8},
      "ips": [{"ip": "203.0.113.5", "sources": ["mx", "spf"], "managed": false}],
      "sections": {
        "dkim": {"status": "pass", "core": true, "findings": [], "data": {}},
        "ptr": {"status": "fail", "core": true, "findings": [], "data": {}}
      },
      "not_checked": [
        {"check": "dkim_signature", "reason": "needs_a_message"},
        {"check": "alignment", "reason": "needs_a_message"}
      ],
      "diff": {
        "baseline": {"id": "ir_01JB2...", "checked_at": "2026-10-24T12:00:00Z"},
        "first_run": false,
        "changed": true,
        "worsened": true,
        "status_from": "pass",
        "score_from": 100,
        "changes": [
          {"path": "dkim.key.mail.sha256", "section": "dkim", "kind": "removed",
           "severity": "critical", "effect": "worsened", "from": "9f2c...", "to": null}
        ],
        "not_compared": [
          {"path": "blocklist_ip.203.0.113.5.bl.spamcop.net.listed", "reason": "lookup_failed"}
        ]
      }
    }
  3. Lisää se croniin

    Kun diff=true, jokaista ajoa verrataan edelliseen ajoosi, ja jq muuntaa vastauksen poistumiskoodiksi.

    Pyyntö

    # exits non-zero if the domain is broken or its setup changed
    curl -s 'https://email-spam-tester.com/api/v1/infra/check?domain=example.com&selector=mail&diff=true' \
      | jq -e '.ok and (.diff.changed | not)'
domainPakollinen. Hyväksyy samat tiedot kuin työkalut: verkkotunnuksen, URL-osoitteen tai sähköpostiosoitteen.
ipLähettävä osoitteesi. Toista se useampia osoitteita varten, enintään 6 kertaa.
selectorDKIM-valitsin. Toista se useampia valitsimia varten, enintään 10 kertaa. Jokaisen antamasi valitsimen on oltava olemassa, tai DKIM-osio epäonnistuu.
heloNimi, jonka palvelimesi antaa HELO-komennossa, verrattuna sen PTR-tietueeseen.
accountKenelle pyyntö on tarkoitettu. Pakollinen avaimen kanssa, joka palvelee useita käyttäjiä.
checksSuoritettavat osiot pilkuilla erotettuina. Oletuksena kaikki osiot.
difftrue vertaa tätä suoritusta verkkotunnuksen edelliseen suoritukseesi.
since7d, 12h tai ISO 8601 -päivämäärä. Vertaa suoritukseesi, joka on lähimpänä kyseistä ajankohtaa 12 tunnin sisällä, muussa tapauksessa viimeiseen sitä edeltävään suoritukseen. Ottaa diffin käyttöön.
baselineYhden vertailtavan suorituksesi tunniste. Ottaa diffin käyttöön.
freshtrue ohittaa 60 sekunnin välimuistin.

Vastauksen lukeminen

Valmistunut tarkistus palauttaa 200, ja tulos on vastausrungossa. status on vaadituista osioista heikoin: spf, dkim, dmarc, ptr, blocklist_ip, blocklist_domain, mx ja smtp. Vaaditun osion unknown lasketaan warn-tilaksi. ok on true, kun status on pass tai warn. score on 0–100 vastanneiden vaadittujen osioiden perusteella ja null, kun virheiden ja unknown-tilojen vuoksi sovellettavasta painosta jää alle puolet. mta_sts, tls_rpt, bimi, dnssec, dane, ns ja registration raportoidaan ja niitä verrataan, mutta ne eivät vaikuta ok- tai score-arvoon.

Osion tila voi olla pass, warn, fail, error (emme voineet tarkistaa), unknown (tietoja on liian vähän) tai skipped (ei sovellu). skipped ei vaikuta tulokseen, ja syy on not_checked-kentässä. dkim_signature ja alignment ovat aina mukana, koska ne tarvitsevat oikean viestin.

Mitä ip ja selector muuttavat

PTR ja estolistat koskevat osoitteita, joten ajo tarvitsee niitä. Se käyttää antamiasi ip-arvoja. Jos niitä ei ole, se ottaa enintään neljä osoitetta MX-palvelimistasi sekä juuritason SPF-tietueen yhden osoitteen ip4:- ja ip6:-ehdoista. Tunnetun sähköpostipalveluntarjoajan osoitteet merkitään managed-tilaan ja jätetään tarkistamatta, ja jos mitään ei jää jäljelle, ptr ja blocklist_ip palauttavat skipped. Selectoria ei voi lukea DNS:stä, joten ajo kokeilee antamaasi selectoria, aiempien ajojesi löytämiä selectoreita ja yleisten nimien luetteloa. Se, ettei mitään löydy, ei todista mitään, ja dkim palauttaa unknown. Jos lähetät omalta palvelimeltasi, anna molemmat.

Mikä muuttui

Jokaisella diff.changes-kohteella on path, kind (added, removed, changed), severity (critical, warning, info) ja effect (worsened, improved, neutral). Vain critical ja warning asettavat diff.changed-arvon, joten samanpituiseen vaihdettu DKIM-avain, uusi MX-osoite tai uusittu varmenne ei aiheuta cron-rivin epäonnistumista. diff.worsened määräytyy minkä tahansa muutoksen effect-arvon perusteella. Ensimmäisellä suorituskerralla vertailtavaa ei ole, ja diff.first_run ilmaisee tämän.

Vertailutaso on aina oma ajosi, joten se, että joku muu tarkistaa verkkotunnuksen kahden ajosi välissä, ei peitä mitään. Kaikki, mitä emme tällä kertaa voineet lukea, siirtyy diff.not_compared-kohtaan viimeksi tunnetun arvonsa kanssa, mikä tarkoittaa, että käyttökatkon aikana tehty muutos tulee näkyviin, kun haku toimii jälleen. Ajo, jolla on eri ip tai selector, pysyy samassa sarjassa, eikä myöskään asioita, joita se ei pyytänyt, verrata.

Miksi ajoitetun tarkistuksen kannattaa käyttää avainta

Ilman avainta historiasi kuuluu IP-osoitteesi avaimelliseen tiivisteeseen, joten se päättyy osoitteen vaihtuessa, ja saman osoitteen takana olevat käyttäjät jakavat sen: kollegan ajo siirtää vertailutasoasi. Kun Authorization: Bearer -otsakkeessa on henkilökohtainen API-avain, historia seuraa avainta. Avaimella tehdyt ajot säilytetään 365 päivää, ja ne voi avata vain kyseisellä avaimella. Ilman avainta tehdyt ajot säilytetään 30 päivää, ja ne voi avata kuka tahansa, jolla on niiden tunnus.

6 pyyntöä minuutissa ja 50 päivässä IP-osoitetta kohden tai 30 ja 500 avainta kohden. Tämän ylityttyä vastaus on 429 ja sisältää Retry-After-otsakkeen. Täsmälleen sama pyyntö 60 sekunnin sisällä tulee välimuistista, merkitään cached: true -arvolla, ei kirjoita ajoa eikä sitä lasketa mukaan. Tallennettujen ajojen lukeminen sallii 120 pyyntöä minuutissa asiakasta kohden. 503 ja Retry-After tarkoittavat, että tarkistuksia on käynnissä liikaa tai tallennettuja ajoja luettaessa tallennustila ei ole käytettävissä. 401 tarkoittaa väärää avainta. 422 sisältää detail.code-arvon: invalid_domain, invalid_ip, invalid_selector, invalid_check, invalid_since, unknown_baseline tai account_required.

Päätepisteet

GET/api/v1/infra/check

Suorittaa tarkistuksen. Parametrit ovat yllä olevassa taulukossa.

GET/api/v1/infra/runs/{public_id}

Yksi tallennettu ajo kokonaisuudessaan. 404, jos sitä ei ole olemassa tai se kuuluu toiselle avaimelle.

GET/api/v1/infra/domains/{domain}/runs

Sinun verkkotunnukselle tekemäsi ajot, uusin ensin: id, aika, tila, pistemäärä ja muutosten määrä. Ottaa parametrit limit (1–100, oletuksena 30) ja before, joka on ajon id.

GET/api/v1/infra/diff

Sama vertailu kahden tallennetun ajon välillä, ?from=<id>&to=<id>. Sinulla on oltava pääsy molempiin.

GET/api/v1/infra/checks

Jokainen osio painoineen, pistemäärän versioineen ja rajoineen.

Yksittäiset tarkistukset

Jokainen kutsu vastaa yhteen kysymykseen eikä säilytä historiaa. Työkalu suorittaa yhden infrastruktuurin tarkistuksen osan itsenäisesti lukuun ottamatta otsaketyökalua, joka lukee jo vastaanottamasi viestin.

Pika-aloitus

  1. Valitse tarkistus

    Valitse työkalu alla olevasta luettelosta ja anna sen pyytämä verkkotunnus, osoite tai IP-osoite.

    Pyyntö

    curl -s 'https://email-spam-tester.com/api/v1/tools/spf?domain=example.com'
  2. Lue tila ja havainnot

    Jokainen työkalu vastaa tilalla ja havainnoillaan. Niiden jälkeiset kentät riippuvat työkalusta.

    Vastaus

    {
      "tool": "spf",
      "query": {"domain": "example.com"},
      "checked_at": "2026-10-31T12:00:00Z",
      "duration_ms": 412,
      "status": "fail",
      "findings": [
        {"code": "spf.too_many_lookups", "level": "fail",
         "params": {"limit": 10, "count": 12},
         "message": "RFC 7208 §4.6.4 allows at most 10 DNS lookups, and this record needs 12, so receivers return permerror."}
      ],
      "record": "v=spf1 include:_spf.example.net ~all",
      "lookups": {"count": 12, "limit": 10, "void": 0}
    }

Päätepisteet

Kaikki vastaavat koodilla 200 sekä tilalla ja löydösten luettelolla, jossa jokaisella löydöksellä on koodi ja sen parametrit. Tila on pass, warn, fail tai error, ja infrastruktuuritarkistuksen kanssa yhteinen työkalu voi palauttaa myös unknown tai skipped. Aikakatkaisuun päättynyt haku tai kyselystä kieltäytynyt luettelo ei koskaan ole pass. Enintään 30 pyyntöä minuutissa ja 300 päivässä IP-osoitetta kohden kaikissa työkaluissa; tämän rajan ylittyessä vastaus on 429 ja sisältää Retry-After-otsakkeen.

GET/api/v1/tools/spf

Verkkotunnuksen SPF-tietue: sen syntaksi, jokainen seurattu include ja redirect sekä koko puun aiheuttamien DNS-hakujen määrä suhteessa kymmenen haun rajaan. Anna ?domain=example.com.

GET/api/v1/tools/dmarc

Verkkotunnuksen DMARC-tietue tai sen organisaatiotason verkkotunnuksen tietue, jos sillä ei ole omaa: tunnisteet, käytäntö ja se, onko kukin ulkoinen raporttiosoite suostunut vastaanottamaan raportteja. Anna ?domain=example.com.

GET/api/v1/tools/dkim

Valitsimelle julkaistu DKIM-avain: onko se olemassa ja voidaanko se dekoodata, sen tyyppi ja koko sekä kumoamis- ja testaustunnisteet. Anna ?domain=example.com&selector=s1.

GET/api/v1/tools/blocklist

IPv4-osoite, IPv6-osoite tai verkkotunnus tarkistettuna raportin käyttämistä DNS-estolistoista sekä kunkin listan vastaus. Anna ?target=203.0.113.5.

GET/api/v1/tools/mx

Verkkotunnuksen MX-tietueet siinä järjestyksessä, jossa lähettäjät kokeilevat niitä, sekä jokaisen isäntäkoneen IPv4- ja IPv6-osoitteet. Null MX, verkkotunnus ilman MX-tietuetta, IP-osoitteita tai CNAME-tietueita olevat isäntäkoneet ja isäntäkoneet, joiden osoitetta ei voida selvittää, raportoidaan, samoin kuin MTA-STS- ja TLS-RPT-tietueet. Anna ?domain=example.com.

GET/api/v1/tools/bimi

Verkkotunnuksen BIMI-määritys neljässä vaiheessa: BIMI:n edellyttämä DMARC-käytäntö, tietue osoitteessa default._bimi, Tiny PS -profiilia vasten tarkistettu SVG-logo ja merkkivarmenne sekä sen tyyppi, verkkotunnukset ja vanhenemisaika. Anna ?domain=example.com ja &selector=, jos valitsin on muu kuin default.

GET/api/v1/tools/ptr

Osoitteen PTR-tietueet ja se, ratkeaako jokin näistä nimistä takaisin kyseiseen osoitteeseen. Epäonnistunut haku antaa tilaksi error; puuttuva tietue antaa tilaksi fail. Anna ?ip=8.8.8.8.

GET/api/v1/tools/mta-sts

Verkkotunnuksen MTA-STS-tietue ja sen osoittama käytäntötiedosto: tila, luetellut palvelimet ja kaikki MX-palvelimet, jotka käytäntö jättää pois. Anna ?domain=example.com.

GET/api/v1/tools/tls-rpt

Verkkotunnuksen TLS-RPT-tietue ja osoitteet, jotka vastaanottavat sen raportit. Anna ?domain=example.com.

GET/api/v1/tools/dnssec

DNSKEY- ja DS-tietueiden perusteella se, onko verkkotunnuksen vyöhyke allekirjoitettu, allekirjoittamaton vai virheellinen. Virheellinen allekirjoitus erotetaan resolverin käyttökatkosta. Anna ?domain=example.com.

GET/api/v1/tools/dane

MX-palvelinten TLSA-tietueet verrattuina palvelimen esittämään varmenteeseen, kun varmenne voitiin lukea. Anna ?domain=example.com.

GET/api/v1/tools/smtp

STARTTLS ja kahden ensimmäisen MX-palvelimen varmenne: TLS-versio, myöntäjä, vanhenemispäivä sekä se, ovatko ketju ja nimi kelvollisia. Muodostamme yhteyden vain pyytämääsi verkkotunnukseen kuuluviin palvelimiin ja ohitamme sähköpostipalveluntarjoajat, ja yhtä osoitekohtaista tulosta käytetään yhteisesti 6 tunnin ajan. Sähköpostia ei lähetetä. Anna ?domain=example.com.

GET/api/v1/tools/ns

Verkkotunnuksen nimipalvelimet ja se, onko sen vyöhykkeellä SOA-tietue. Yksi nimipalvelin aiheuttaa varoituksen. Anna ?domain=example.com.

GET/api/v1/tools/registration

RDAP-tietojen perusteella ajankohta, jolloin verkkotunnuksen rekisteröinti päättyy. Alle 30 jäljellä olevaa päivää aiheuttaa varoituksen. Vyöhykkeelle, jolla ei ole RDAP-palvelua, palautetaan skipped. Anna ?domain=example.com.

POST/api/v1/tools/header

Vastaanotetun viestin otsakkeet, lähetettyinä JSON-muodossa {"headers": "..."} tai muodossa text/plain: reitti hyppy hypyltä viiveineen, TLS-tietoineen ja kellojen poikkeamineen, vastaanottajan oma Authentication-Results, From-, DKIM d=- ja Return-Path-verkkotunnusten kohdistus sekä DKIM-, ARC-, tilauksen peruutus- ja roskapostisuodattimen otsakkeet. Kaikki ensimmäisen tyhjän rivin jälkeen ohitetaan lukematta. Otsakkeet käsitellään muistissa, eikä niitä tallenneta, välimuistiteta tai kirjata lokiin.

Tarkista verkkotunnus joka yö.
Testaa sähköposti ennen kuin se lähtee.

Kaikille tuotteille yhteistä

Käyttöoikeudet, avaimet, raporttimuoto, tilat, virheet sekä OpenAPI ja koneille tarkoitettu llms.txt.

Todennus

Sitä ei ole. Ei pyydettävää avainta, asetettavaa otsaketta eikä luotavaa tiliä. Palautettu slug-tunniste toimii käyttöoikeutena: sen haltija voi lukea raportin, eivätkä muut voi arvata sitä.

Tämä tarkoittaa myös, että slug-tunnistetta kannattaa käsitellä salasanan tavoin. Raportti näyttää aiherivin, lähettäjän, palautusosoitteen ja viestin koko lähdekoodin kaikille, joilla on linkki.

Henkilökohtaiset API-avaimet

Everything above works without a key. A key is for automation platforms such as Zapier, where every user's calls come from the platform's servers and per-IP limits would be shared by all of them. With a key, limits count per key (50 tests a day, 3 with placement, 5 permanent mailboxes), the key's tests form a history, and the key can keep permanent mailboxes whose reports only it can read. Send the key as Authorization: Bearer est_live_… on any call on this page. The routes below also take account, a short name of your choosing ([A-Za-z0-9_-], up to 64 characters) that keeps separate lists under one key. GET /api/v1/installations/tests requires it; pass the same one on POST /api/v1/inbox so the test shows up there. The Zapier integration uses zapier.

POST /api/v1/keys

Send JSON {"email":"you@example.com"}. Returns HTTP 201 with key and email. The key is shown once; only its hash is kept. Asking again gives a new key and leaves the earlier ones working. Limit: 5 keys per IP per UTC day. The form on /zapier/ calls this.

GET /api/v1/keys/me

Returns email, key_prefix and created_at of the key in the header, or HTTP 401. Use it to check a key.

GET /api/v1/installations/tests

The key's tests, newest first: ?account=…&limit=50 (up to 100), and before=<slug> for the next page. Each item has slug, created_at, analysis_status (waiting or expired before an email arrived), score_ours, score_compat, placement and changes, the checks that moved since the previous test of the same sending domain. Read the full report at /api/v1/tests/{slug}.

POST /api/v1/installations/mailboxes

Send JSON {"domain":"example.com","account":"…"}. Returns the permanent mailbox of that sending domain: id, address, domain, state, daily_cap and created. HTTP 201 when it is new, 200 when it already existed, 409 when the key keeps as many mailboxes as it may. Subscribe the address to a newsletter or a sequence and every email that arrives is checked. GET on the same path with ?account=… lists them, and DELETE /api/v1/installations/mailboxes/{mailbox_id} stops one.

GET /api/v1/installations/mailboxes/{mailbox_id}/letters

The emails that arrived, oldest first, paged with after_id and next_after_id. settled=true ends the page before the first email still being checked, so paging never skips one. newest=true turns the order round, for a quick look at the latest; settled does nothing with it. Each has test_id, slug, received_at, analysis_status, score_ours, score_compat, subject, from_addr and kind.

GET /api/v1/installations/letters/{slug}

The report of one email in a permanent mailbox, the same JSON as /api/v1/tests/{slug} with report_url null: there is no public page for it. HTTP 410 once the report has expired.

Raportin lukeminen

Vastauksen sisältävät kentät siinä järjestyksessä, jossa todennäköisesti haluat ne.

score_ours0–100. Oma mallimme. Todennuksella ja infrastruktuurilla on suurin paino, koska ne ratkaisevat toimituksen ennen kuin suodatin lukee sanaakaan viestin tekstistä.
score_compat0–10. Toistaa SpamAssassin-tyylisen luvun, johon ihmiset jo vertaavat tuloksia, jotta raporttia voi verrata muualla nähtyihin tuloksiin.
subscoresSama asteikko 0–100 osiota kohden: auth, infra_spam, content, compliance.
checks[]Kaikki 42, jokaisessa tila, yhden rivin havainto, päätöksen perustana ollut näyttö ja vaikutus kumpaankin pistemäärään.
checks[].citationsMistä havainto on peräisin: RFC:n kohta sanatarkasti lainattuna ja sivu, jolla Google ilmoittaa oman vaatimuksensa. Koottu käsin eikä generoitu, joten niihin voi luottaa.
korjaukset[]Mitä muuttaa, missä järjestyksessä ja kuinka monta pistettä kustakin muutoksesta saa. Parannukset lasketaan pisteyttämällä raportti uudelleen, niitä ei arvioida.
valmisEpätosi, kun tarkistusta ei voitu suorittaa. Tarkistamaton kohde ei koskaan ole hyväksytty, joten pidä pisteytystä optimistisena, kunnes arvo on tosi.
raportin_urlIhmisen luettavissa oleva sivu. Anna se henkilölle JSON-tekstiseinän sijaan.

Tilat

Tarkistuksella on yksi viidestä tilasta, ja kahden niistä välinen ero on merkityksellisempi kuin miltä näyttää.

hyväksyttyTarkistus suoritettiin, eikä siinä havaittu ongelmia.
varoitusKannattaa korjata. Vähentää pisteitä.
hylättyHeikentää toimitettavuutta. Maksaa enemmän pisteitä.
ohitettuEi soveltunut. Ei tarkistettavia liitteitä eikä arvioitavaa HTML-osaa. Ei tarkoita läpäisyä.
virheEmme pystyneet selvittämään tulosta. Se jätetään pisteytyksen ulkopuolelle ja merkitään, eikä sitä lasketa läpäisyksi.

analysis_status voi olla received, analyzing, checks_ready tai failed. ai_status voi olla pending, running, ready, fallback tai error. Deterministinen raportti on lopullinen tilassa checks_ready; ai_status lisää vain suunnitelman.

Mitä voidaan palauttaa

202Osoite on varattu, eikä viestiä ole saapunut. Runko sisältää osoitteen, vanhenemisajan ja kielen, joten kutsuja, joka ei luonut varausta, voi silti näyttää sen.
404Tällaista tunnistetta ei ole. Sitä ei ole koskaan ollut, tai varaus unohdettiin.
410Osoite vanheni ennen viestin saapumista.
409Yritit vaihtaa kieltä sen jälkeen, kun viesti oli jo saapunut.
429Osoitteesi ilmaisten testien raja. Tässä palvelussa ei tällä hetkellä ole henkilökohtaista rajaa; jos sellainen joskus asetetaan, runko kertoo, milloin se nollautuu.

Neljä tietämisen arvoista asiaa

Yksi viesti osoitetta kohden

Toinen viesti hylätään. Aiempi raporttisi säilyy muuttumattomana, mikä on tarkoituskin.

Tunti aikaa käyttää sitä

Osoite vanhenee, mutta raportti ei. Raporttilinkit ovat pysyviä, joten tukipyyntöön liitetty linkki toimii jatkossakin.

Lähetä alustalta

Kampanjan testaaminen henkilökohtaiselta tililtä mittaa kyseistä tiliä. Lähes kaikki todennusosiossa koskee lähetysinfrastruktuuria, ei tekstiä.

Testaa uudelleen korjauksen jälkeen

Odotetut parannukset lasketaan yksi korjaus kerrallaan, eivätkä ne summaudu. Toinen raportti antaa rehellisen luvun.

Koneille

GET/api/health

Toimivuustarkistus. Ei todennusta, ei sivuvaikutuksia.

Kokeile ensin yhtä käsin

Se kestää noin minuutin ja näyttää täsmälleen, mitä JSON kuvaa.

Hanki testiosoite

Sandbox.

Jokainen päätepiste, painikkeella, joka suorittaa sen reaaliaikaista palvelua vasten. Mikään täällä ei vaadi avainta, joten tältä sivulta lähettämäsi pyyntö on todellinen: se varaa todellisen osoitteen ja se lasketaan mukaan.

Kokeile sandboxissa