Email Spam Tester

Spam kontrol API'si: e-posta,
gelen kutusu ve alan adı

Bize gerçek bir mesaj gönderin veya yalnızca bir alan adı verin. Her şey JSON olarak yanıtlanır.

Anahtar yok, hesap yok.

İstek

# 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'

Yanıt

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

İstek

# 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'

Yanıt

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

İstek

# 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'

Yanıt

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"}]
}
Bu sayfada

E-posta testi

Gerçek bir mesajı baştan sona inceleriz: içerik, imza, başlıklar ve mesajı gönderen sunucu. Bir puan, düzeltme listesi ve bunların arkasındaki tüm kontrolleri alırsınız.

Hızlı başlangıç

Üç çağrı. Anahtar yok, hesap yok, kayıt yok. İki istek ve bir e-posta. Üçüncü çağrı yalnızca analiz birkaç saniye sürdüğü için vardır.

  1. Bir adres ayırın

    Gelen kutusu uç noktasına POST isteği gönderin. Tam olarak bir ileti kabul eden ve bir saat içinde süresi dolan bir adresin yanı sıra diğer her şeyin anahtar olarak kullandığı kısa adı alırsınız.

    İstek

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

    Yanıt

    {
      "address": "test-<slug>@t.email-spam-tester.com",
      "slug": "<slug>",
      "expires_at": "2026-01-01T12:00:00Z"
    }
  2. Gerçek iletiyi bu adrese gönderin

    SMTP üzerinden, kampanyayı gönderecek platformdan gönderin. Kontrollerin yarısı gönderim platformunuzun eklediği üstbilgileri okur, bu nedenle elle oluşturulan bir ileti yanlış şeyi ölçer.

    İstek

    # 2. send your message to that address, from your own platform
    To: test-<slug>@t.email-spam-tester.com
  3. Durumu yoklayın, ardından raporu okuyun

    Durum uç noktası birkaç yüz bayttır ve tam raporu almaya değip değmediğini bildirir. Raporun kendisi birkaç bin satırdır.

    İstek

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

    Yanıt

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

    İstek

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

    Yanıt

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

Bir adres ayırın, listenize göndermek üzere olduğunuz iletiyi gönderin, raporu okuyun. Puan, kanıtlarıyla birlikte 42 kontrolün tamamı ve her bulgunun dayandığı standart bölümü dahil olmak üzere sayfada gösterilen her şey JSON içindedir.

İlk 100.000 rapor ücretsizdir; anahtar ve hesap gerekmez. Bir betik yerine bir ajan bağlıyorsanız, MCP sunucusu yoklamadan daha uygundur.

Uç Noktalar

Temel adres https://email-spam-tester.com. Her şey JSON olarak yanıt verir.

POST/api/v1/inbox

Tek kullanımlık bir adres ayırır. Her iki parametre de isteğe bağlıdır.

langDüzeltme planının ve denetim başına bulguların yazılacağı dilin ISO kodu. Buna şimdi karar verilir çünkü ileti dakikalar sonra SMTP üzerinden gelir ve onu kimin beklediğine dair hiçbir ipucu taşımaz. Bilinmeyen bir kod için varsayılan olarak İngilizce kullanılır.
utm_source, utm_medium, utm_campaignAnaliz sistemimize aynen iletilir. Kendi entegrasyonunuzu ölçüyorsanız kullanışlıdır.

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

Sık sorgulamak düşük maliyetlidir. İki durum alanını ve denetimlerin ne kadar ilerlediğini döndürür, başka hiçbir şey döndürmez.

Rapor yerine bunu sorgulayın. analysis_status önce checks_ready durumuna ulaşır ve yapay zekâ planı yaklaşık bir dakika sonra ai_status alanına gelir; böylece yalnızca deterministik denetimleri isteyen bir çağrı sahibinin planı beklemesi gerekmez.

GET/api/v1/tests/{slug}

Raporun tamamı. Adres ayrılmışken ve henüz hiçbir şey ulaşmamışken 202, ulaştıktan sonra 200 yanıtını verir.

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

İleti tam olarak teslim edildiği şekliyle: iletim sırasındaki her başlık, her iki gövde, ek listesi ve ham kaynak. Rapor sorgulandığı ve bunun boyutu bir megabayta ulaşabildiği için ayrı olarak alınır.

Ham ileti, kendi zamanlayıcısına göre rapordan daha erken silinir. Bundan sonra bu uç nokta kaynak yerine gerekçeyle yanıt verir.

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

Henüz kullanılmamış bir rezervasyonun dilini değiştirir. Adresi zaten istemiş olan ve kullanıcısının hangi dili okuduğunu sonradan öğrenen bir aracı içindir. İleti ulaştıktan sonra reddedilir, çünkü o zamana kadar analiz çalışmaya başlamıştır.

Gelen kutusu yerleşimiBeta

Test gelen kutuları listesine bir mesaj gönderin ve Gmail, Outlook, Yahoo ve diğer sağlayıcılarda nereye ulaştığını görün: Gelen Kutusu, Tanıtımlar veya Spam.

Hızlı başlangıç

  1. Bir test oluşturun

    Yerleşim uç noktasına POST isteği gönderin. Bir işaretleyici ve test gelen kutularını alırsınız.

    İstek

    # 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}'

    Yanıt

    {
      "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. Her gelen kutusuna bir ileti gönderin

    İşaretleyiciyi konuya ekleyin ve normal platformunuzdan tüm adreslere tek seferde gönderin.

    İstek

    # 2. one message to every address, with the marker in the subject
    Subject: October invoice est-3f9a1c7e2b4d6a80c5e1f2d3
    To: <seed>, <mailbox>, ...
  3. Klasörleri sorgulayın

    Her adres için sağlayıcı ve klasör bilgileri doldurulur. Durum waiting olmaktan çıkana kadar sorgulayın.

    İstek

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

    Yanıt

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

Uç Noktalar

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.

Altyapı denetimi

Tek bir GET, hiçbir şey göndermeden bir alan adının posta yapılandırmasını denetler, sonucu saklar ve son çalıştırmanızdan bu yana nelerin değiştiğini bildirir. Anahtar gerekmez. cron içinde aşağıdaki satır, alan adı bozuk olduğunda veya yapılandırması önemli bir şekilde değiştiğinde sıfır olmayan bir çıkış koduyla sonlanır.

Hızlı başlangıç

  1. Tek bir GET isteği yapın

    Alan adını iletin. ip, gönderim adreslerinizi ekler ve selector, okunacak DKIM seçicilerini belirtir.

    İstek

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

    ok, bir betik için yanıttır ve sections, hangi bölümün başarısız olduğunu gösterir.

    Yanıt

    {
      "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. cron'a ekleyin

    diff=true ile her çalıştırma son çalıştırmanızla karşılaştırılır ve jq, yanıtı bir çıkış koduna dönüştürür.

    İstek

    # 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)'
domainGerekli. Araçların kabul ettiği değerleri kabul eder: bir alan adı, URL veya e-posta adresi.
ipGönderim adresiniz. Daha fazlası için bunu en fazla 6 kez tekrarlayın.
selectorBir DKIM seçicisi. Daha fazlası için bunu en fazla 10 kez tekrarlayın. İlettiğiniz her seçici mevcut olmalıdır, aksi takdirde DKIM bölümü başarısız olur.
heloSunucunuzun HELO sırasında verdiği ad; PTR kaydıyla karşılaştırılır.
accountİsteğin kimin için olduğu. Birçok kişiye hizmet veren bir anahtarla kullanıldığında gereklidir.
checksÇalıştırılacak bölümler, virgülle ayrılmış olarak. Varsayılan olarak tümü.
difftrue, bu çalıştırmayı alan adındaki son çalıştırmanızla karşılaştırır.
since7d, 12h veya bir ISO 8601 tarihi. 12 saat içinde o ana en yakın çalıştırmanızla, aksi takdirde ondan önceki son çalıştırmayla karşılaştırır. diff'i açar.
baselineKarşılaştırılacak çalıştırmalarınızdan birinin kimliği. diff'i açar.
freshtrue, 60 saniyelik önbelleği atlar.

Yanıtı okuma

Tamamlanan bir kontrol 200 yanıtını verir ve karar gövdede yer alır. status, gerekli bölümler arasındaki en kötü durumdur: spf, dkim, dmarc, ptr, blocklist_ip, blocklist_domain, mx ve smtp. Gerekli bir bölümdeki unknown, warn olarak sayılır. status pass veya warn olduğunda ok true olur. score, yanıt veren gerekli bölümler üzerinden 0 ile 100 arasında değişir ve hatalar ile unknown durumları geçerli ağırlığın yarısından azını bıraktığında null olur. mta_sts, tls_rpt, bimi, dnssec, dane, ns ve registration raporlanır ve karşılaştırılır, ancak ok veya score üzerinde etkileri yoktur.

Bir bölüm pass, warn, fail, error (kontrol edemedik), unknown (karar vermek için çok az bilgi var) veya skipped (geçerli değil) olabilir. skipped sonucu etkilemez ve nedeni not_checked içinde yer alır. dkim_signature ve alignment her zaman bulunur, çünkü gerçek bir ileti gerektirirler.

ip ve selector neyi değiştirir

PTR ve engelleme listeleri adreslerle ilgilidir, dolayısıyla bir çalıştırma için bazı adresler gerekir. İlettiğiniz ip değerlerini kullanır. Hiçbiri yoksa MX ana bilgisayarlarınızdan ve kök SPF kaydındaki tek adresli ip4: ve ip6: terimlerinden en fazla dört tane alır. Bilinen bir e-posta sağlayıcısının adresleri managed olarak listelenir ve kontrol edilmeden bırakılır; geriye hiçbir şey kalmazsa ptr ve blocklist_ip skipped yanıtını verir. Bir selector DNS üzerinden okunamaz, dolayısıyla çalıştırma sizin ilettiğinizi, önceki çalıştırmalarınızın bulduklarını ve yaygın adların bir listesini dener. Hiçbir şey bulamamak hiçbir şeyi kanıtlamaz ve dkim unknown yanıtını verir. Kendi sunucunuzdan gönderim yapıyorsanız ikisini de iletin.

Neler değişti

diff.changes içindeki her girdinin bir path, bir kind (added, removed, changed), bir severity (critical, warning, info) ve bir effect (worsened, improved, neutral) alanı vardır. Yalnızca critical ve warning, diff.changed değerini ayarlar; bu nedenle aynı uzunlukta yenilenmiş bir DKIM anahtarı, yeni bir MX adresi veya yenilenmiş bir sertifika cron satırının başarısız olmasına neden olmaz. diff.worsened, herhangi bir değişikliğin effect değerini izler. İlk çalıştırmada karşılaştırılacak hiçbir şey yoktur ve diff.first_run bunu belirtir.

Referans her zaman size ait bir çalıştırmadır, dolayısıyla sizin iki çalıştırmanız arasında başka birinin domaini kontrol etmesi hiçbir şeyi gizlemez. Bu kez okuyamadığımız her şey, son bilinen değeri korunarak diff.not_compared içine gider; bu, bir kesinti sırasında yapılan değişikliğin arama yeniden çalıştığında görünmesi anlamına gelir. Farklı bir ip veya selector içeren çalıştırma aynı seride kalır ve istemediği öğeler de karşılaştırılmaz.

Zamanlanmış bir kontrol neden anahtar kullanmalıdır

Anahtar olmadan geçmişiniz IP adresinizin anahtarlı özetine ait olur; bu nedenle adres değiştiğinde sona erer ve aynı adresin arkasındaki kişiler geçmişi paylaşır: bir iş arkadaşınızın çalıştırması referansınızı değiştirir. Authorization: Bearer içinde kişisel bir API anahtarı kullanıldığında geçmiş anahtarı izler. Anahtarlı çalıştırmalar 365 gün saklanır ve yalnızca bu anahtarla açılır. Anahtarsız çalıştırmalar 30 gün saklanır ve id değerine sahip herkes tarafından açılabilir.

IP başına dakikada 6 ve günde 50 istek ya da anahtar başına dakikada 30 ve günde 500 istek. Bunun üzerinde yanıt, Retry-After ile birlikte 429 olur. 60 saniye içindeki aynı istek önbellekten gelir, cached: true olarak işaretlenir, çalıştırma kaydı oluşturmaz ve kotaya dahil edilmez. Saklanan çalıştırmaları okumak istemci başına dakikada 120 isteğe izin verir. Retry-After ile birlikte 503, çok fazla kontrolün çalıştığı veya saklanan çalıştırmalar okunurken depolamanın kullanılamadığı anlamına gelir. 401, anahtarın yanlış olduğunu belirtir. 422, şu detail.code değerlerinden birini taşır: invalid_domain, invalid_ip, invalid_selector, invalid_check, invalid_since, unknown_baseline veya account_required.

Uç Noktalar

GET/api/v1/infra/check

Kontrolü çalıştırır. Parametreler yukarıdaki tablodadır.

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

Kayıtlı tek bir çalıştırmanın tamamı. Mevcut değilse veya başka bir anahtara aitse 404 döndürür.

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

Bir alan adına yönelik çalıştırmalarınız, en yeniden en eskiye: kimlik, zaman, durum, puan ve değişiklik sayısı. limit (1 ile 100 arasında, varsayılan olarak 30) ve bir çalıştırma kimliği olan before parametrelerini alır.

GET/api/v1/infra/diff

Kayıtlı iki çalıştırma arasındaki aynı karşılaştırma, ?from=<id>&to=<id>. Her ikisine de erişiminiz olmalıdır.

GET/api/v1/infra/checks

Ağırlığı, puan sürümü ve sınırlarıyla birlikte her bölüm.

Tekil kontroller

Her çağrı bir soruyu yanıtlar ve geçmiş tutmaz. Üstbilgi aracı dışında her araç, altyapı kontrolünün bir bölümünü kendi başına çalıştırır; üstbilgi aracı ise daha önce aldığınız bir iletiyi okur.

Hızlı başlangıç

  1. Bir kontrol seçin

    Aşağıdaki listeden aracı seçin ve istediği alan adını, adresi veya IP'yi iletin.

    İstek

    curl -s 'https://email-spam-tester.com/api/v1/tools/spf?domain=example.com'
  2. Durumu ve bulguları okuyun

    Her araç bir durum ve bulgularıyla yanıt verir. Bunlardan sonraki alanlar araca göre değişir.

    Yanıt

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

Uç Noktalar

Bunların tümü, bir durum ve her biri bir kod ile parametrelerini içeren bulgu listesiyle 200 yanıtını verir. Durum pass, warn, fail veya error olur; altyapı denetimiyle ortak kullanılan bir araç ayrıca unknown veya skipped yanıtını da verebilir. Zaman aşımına uğrayan bir sorgu veya sorguyu reddeden bir liste hiçbir zaman pass sayılmaz. Araçların tamamında IP başına dakikada 30 ve günde 300 istek; bu sınırın üzerinde yanıt, Retry-After ile birlikte 429 olur.

GET/api/v1/tools/spf

Bir alan adının SPF kaydı: söz dizimi, izlenen her include ve redirect ve tüm ağacın on sınırına karşı kullandığı DNS sorguları. ?domain=example.com parametresini geçirin.

GET/api/v1/tools/dmarc

Bir alan adının DMARC kaydı veya alan adının böyle bir kaydı yoksa kurumsal alan adının DMARC kaydı: etiketler, politika ve her harici rapor adresinin raporları almayı kabul edip etmediği. ?domain=example.com parametresini geçirin.

GET/api/v1/tools/dkim

Bir seçici için yayımlanan DKIM anahtarı: mevcut olup olmadığı ve çözümlenip çözümlenmediği, türü ve boyutu ve iptal ve test bayrakları. ?domain=example.com&selector=s1 parametrelerini geçirin.

GET/api/v1/tools/blocklist

Raporun kullandığı DNS engelleme listelerinde kontrol edilen bir IPv4 adresi, bir IPv6 adresi veya bir alan adı ve her listenin yanıtı. ?target=203.0.113.5 parametresini geçirin.

GET/api/v1/tools/mx

Bir alan adının MX kayıtları, gönderenlerin bunları denediği sırayla ve her ana makinenin IPv4 ve IPv6 adresleriyle birlikte gösterilir. Null MX, MX kaydı olmayan bir alan adı, IP adresi veya CNAME olan ana makineler ve çözümlenemeyen ana makineler raporlanır; MTA-STS ve TLS-RPT kayıtları da raporlanır. ?domain=example.com parametresini iletin.

GET/api/v1/tools/bimi

Bir alan adının BIMI yapılandırması dört adımda gösterilir: BIMI'nin gerektirdiği DMARC politikası, default._bimi konumundaki kayıt, Tiny PS profiline göre denetlenen SVG logosu ve türü, alan adları ve sona erme tarihiyle birlikte marka sertifikası. ?domain=example.com parametresini, default dışında bir seçici için de &selector= parametresini iletin.

GET/api/v1/tools/ptr

Bir adresin PTR kayıtları ve bu adlardan herhangi birinin yeniden bu adrese çözümlenip çözümlenmediği. Başarısız olan bir sorgu error durumunu verir; eksik bir kayıt fail durumunu verir. ?ip=8.8.8.8 iletin.

GET/api/v1/tools/mta-sts

Bir alan adının MTA-STS kaydı ve işaret ettiği politika dosyası: mod, listelenen ana bilgisayarlar ve politikanın kapsam dışında bıraktığı MX ana bilgisayarları. ?domain=example.com iletin.

GET/api/v1/tools/tls-rpt

Bir alan adının TLS-RPT kaydı ve raporlarını alan adresler. ?domain=example.com iletin.

GET/api/v1/tools/dnssec

Bir alan adının bölgesinin DNSKEY ve DS kayıtlarına göre imzalı, imzasız veya bozuk olup olmadığı. Geçersiz bir imza, çözümleyici kesintisinden ayrı değerlendirilir. ?domain=example.com iletin.

GET/api/v1/tools/dane

MX ana bilgisayarlarının TLSA kayıtları, sertifika okunabildiğinde bir ana bilgisayarın sunduğu sertifikayla karşılaştırılır. ?domain=example.com iletin.

GET/api/v1/tools/smtp

İlk iki MX ana bilgisayarındaki STARTTLS ve sertifika: TLS sürümü, düzenleyen, sona erme tarihi ve zincir ile adın geçerli olup olmadığı. Yalnızca sorguladığınız alan adı altındaki ana bilgisayarlara bağlanır ve posta sağlayıcılarını atlarız; adres başına bir sonuç 6 saat boyunca paylaşılır. Posta gönderilmez. ?domain=example.com iletin.

GET/api/v1/tools/ns

Bir alan adının ad sunucuları ve bölgesinde bir SOA kaydı olup olmadığı. Tek bir ad sunucusu uyarıdır. ?domain=example.com iletin.

GET/api/v1/tools/registration

RDAP verilerine göre bir alan adının kaydının ne zaman sona ereceği. 30 günden az süre kalması uyarıdır. RDAP hizmeti olmayan bir bölge skipped yanıtını verir. ?domain=example.com iletin.

POST/api/v1/tools/header

Alınan bir iletinin JSON {"headers": "..."} olarak veya text/plain biçiminde gönderilen başlıkları: gecikmeler, TLS ve saat sapmasıyla birlikte adım adım rota, alıcının kendi Authentication-Results başlığı, From, DKIM d= ve Return-Path alan adlarının hizalanması ve DKIM, ARC, abonelikten çıkma ve spam filtresi başlıkları. İlk boş satırdan sonraki her şey okunmadan atılır. Başlıklar bellekte işlenir ve saklanmaz, önbelleğe alınmaz veya günlüğe kaydedilmez.

Alan adını her gece kontrol edin.
E-postayı gönderilmeden önce test edin.

Her üründe ortak

Erişim, anahtarlar, rapor biçimi, durumlar, hatalar, ayrıca makineler için OpenAPI ve llms.txt.

Kimlik Doğrulama

Yoktur. Talep edilecek anahtar, ayarlanacak başlık veya oluşturulacak hesap yoktur. Aldığınız slug erişim yetkisidir: onu elinde bulunduran herkes bu raporu okuyabilir ve başka hiç kimse onu tahmin edemez.

Bu aynı zamanda bir slug'ın parola gibi ele alınması gerektiği anlamına gelir. Bir rapor, bağlantıyı elinde bulunduran herkese konu satırını, göndereni, geri dönüş adresini ve iletinin tam kaynağını gösterir.

Kişisel API anahtarları

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.

Raporu okuma

Yanıtı taşıyan alanlar, muhtemelen isteyeceğiniz sırayla.

score_ours0 ile 100 arası. Bizim modelimiz. Kimlik doğrulama ve altyapı ağırlığın çoğunu taşır, çünkü bir filtre metindeki tek bir kelimeyi okumadan önce teslimata onlar karar verir.
score_compat0 ile 10 arası. Kullanıcıların zaten karşılaştırdığı SpamAssassin tarzı sayıyı yeniden üretir, böylece rapor birinin başka bir yerde gördüğü sonuçla karşılaştırılabilir.
subscoresHer bölüm için aynı 0 ile 100 arası ölçek: auth, infra_spam, content, compliance.
checks[]42 kontrolün tamamı; her biri bir durum, tek satırlık bir bulgu, kararın dayandığı kanıt ve iki puana maliyetiyle birlikte.
checks[].citationsBulgunun kaynağı: RFC'nin ilgili bölümü, birebir alıntısı ve Google'ın kendi gereksinimini belirttiği sayfa. Oluşturulmak yerine elle derlenmiştir, bu nedenle bunlara güvenilebilir.
düzeltmeler[]Yapılacak değişiklikler, sırasıyla ve her değişikliğin sağlayacağı puanlarla birlikte. Kazanımlar tahmin edilmez, rapor yeniden puanlanarak hesaplanır.
tamamlandıBir kontrol çalıştırılamadığında False olur. Kontrol edilmemiş bir öğe hiçbir zaman başarılı sayılmaz, bu nedenle true olana kadar puanı iyimser kabul edin.
rapor_urlİnsan tarafından okunabilen sayfa. JSON yığını yerine bunu bir kişiye verin.

Durumlar

Bir kontrol beş durumdan birindedir ve bunlardan ikisi arasındaki fark göründüğünden daha önemlidir.

başarılıKontrol çalıştı ve herhangi bir sorun bulmadı.
uyarıDüzeltilmeye değer. Puan kaybettirir.
başarısızTeslimata mal olur. Daha fazla puana mal olur.
atlaUygulanmadı. Taranacak ek yok, değerlendirilecek HTML bölümü yok. Başarılı sayılmaz.
hataSonucu belirleyemedik. Başarılı sayılmak yerine puanlamaya dahil edilmedi ve işaretlendi.

analysis_status received, analyzing, checks_ready, failed değerlerini alır. ai_status pending, running, ready, fallback, error değerlerini alır. Belirlenimci rapor checks_ready durumunda nihaidir; ai_status yalnızca planı ekler.

Neler dönebilir

202Adres rezerve edilmiştir ve henüz hiçbir ileti ulaşmamıştır. Gövde adresi, sona erme zamanını ve dili içerir; böylece rezervasyonu oluşturmamış bir çağıran da bunları gösterebilir.
404Böyle bir slug yok. Ya hiç var olmadı ya da rezervasyon unutuldu.
410Adres, bir ileti ulaşmadan önce sona erdi.
409İleti zaten ulaştıktan sonra dili değiştirmeyi denediniz.
429Adresiniz için ücretsiz test sınırı. Şu anda bu hizmette kişi başına bir sınır yoktur; ileride belirlenirse gövde, sınırın ne zaman sıfırlanacağını belirtir.

Bilinmesi gereken dört şey

Adres başına bir ileti

İkinci ileti reddedilir. Önceki raporunuz olduğu gibi kalır, amaç da budur.

Kullanmak için bir saat

Adresin süresi dolar; raporun dolmaz. Rapor bağlantıları kalıcıdır, dolayısıyla bir destek kaydına yapıştırılan bağlantı çalışmaya devam eder.

Platformdan gönderin

Bir kampanyayı kişisel bir hesaptan test etmek, o hesabı ölçer. Kimlik doğrulama bölümündeki hemen hemen her şey metinle değil, gönderim altyapısıyla ilgilidir.

Düzelttikten sonra yeniden test edin

Beklenen kazanımlar her seferinde tek bir düzeltme için hesaplanır ve birleşmez. İkinci rapor doğru değeri verir.

Makineler için

GET/api/health

Canlılık denetimi. Kimlik doğrulama yok, yan etki yok.

Önce birini elle deneyin

Yaklaşık bir dakika sürer ve JSON'ın neyi açıkladığını tam olarak gösterir.

Bir test adresi alın

Korumalı alan.

Her uç nokta, onu canlı hizmet üzerinde çalıştıran bir düğmeyle birlikte. Burada hiçbir şey için anahtar gerekmez, bu nedenle bu sayfadan gönderdiğiniz bir istek gerçektir: gerçek bir adres ayırır ve sayılır.

Korumalı alanda deneyin