API
Bir test adresi alın, o adrese mail gönderin, raporu JSON olarak okuyun. Üç istek. Tarayıcıdaki akışın aynısı.
Kimlik doğrulama
Her isteğe X-API-Key başlığını ekleyin. Anahtarı
hesap sayfanızdan oluşturursunuz ve size bir kez gösterilir.
X-API-Key: mt_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Anahtar göndermezseniz istek anonim sayılır ve IP başına günlük limit uygulanır.
Adım 1 — test adresi al
curl -X POST https://mailtesterbox.com/generate \ -H "X-API-Key: $MAILTESTER_KEY"
{
"address": "test-a1b2c3d4e5f6a7b8c9d0@mailtesterbox.com",
"expires_at": "2026-07-30T12:30:00+00:00",
"expires_in": 1800,
"limits": { "scope": "api_key", "limit": 25, "used": 3, "remaining": 22 }
}
Adres 30 dakika yaşar ve tekrar kullanılabilir. Aynı adrese ikinci bir mail atıp yeniden kontrol ederseniz en yeni raporu alırsınız.
Adım 2 — o adrese mail gönderin
Test etmek istediğiniz sunucudan, normalde nasıl gönderiyorsanız öyle gönderin. Biz gönderen IP'yi, HELO adını, TLS sürümünü ve tüm başlıkları bağlantının kendisinden okuyoruz.
Adım 3 — raporu isteyin
curl "https://mailtesterbox.com/check/test-a1b2c3d4e5f6a7b8c9d0@mailtesterbox.com" \ -H "X-API-Key: $MAILTESTER_KEY"
Bu uç nokta hem analizi kuyruğa alır hem durumunu döner. Mail gelene kadar birkaç saniye aralıkla tekrar sorun.
| status | Anlamı |
|---|---|
waiting | Adres canlı, henüz mail gelmedi |
processing | Mail geldi, analiz sürüyor |
analyzed | Rapor hazır, result alanında |
limit | Günlük hakkınız doldu |
expired | Adresin süresi doldu, yeni adres alın |
error | Analiz sırasında bir sorun oldu |
Aynı adrese birden fazla mail atıyorsanız ?after=<event_id> parametresini
kullanın. Böylece daha önce gördüğünüz mailler atlanır ve sadece yenisi beklenir.
Uç noktalar
| Uç nokta | İş |
|---|---|
POST /generate | Yeni test adresi |
GET /check/{adres} | Analizi kuyruğa al ve durumu sor |
GET /result/{adres} | En yeni rapor, salt okunur, kotaya dokunmaz |
GET /limits | Kalan günlük hak |
GET /history | Geçmiş raporlarınız |
GET /history/{id} | Bir geçmiş rapor, tam hâliyle |
Şema düzeyinde teknik referans için /docs adresindeki OpenAPI arayüzünü kullanabilirsiniz.
Rapor içeriği
result alanı 10 üzerinden puanı, düşen her kalemi ve tüm kontrolleri taşır.
{
"status": "analyzed",
"event_id": "6a6b12a4cc21db9abcd7ee74",
"result": {
"score": 9.2,
"title": "Excellent",
"issues": [
{ "code": "DMARC_POLICY_NONE", "points": -0.3, "severity": "low",
"title": "DMARC policy is set to none", "how_to_fix": "..." }
],
"checks": {
"spf": { "status": "ok", "result": "pass", "record": ["v=spf1 ip4:... -all"] },
"dkim": { "status": "ok", "verified": true, "selector": "default", "signing_domain": "..." },
"dmarc": { "status": "ok", "result": "pass", "policy": "none",
"spf_aligned": true, "dkim_aligned": true },
"rdns": { "success": true, "hostname": "mx.ornek.com", "matches": true },
"helo": { "value": "mx.ornek.com", "is_fqdn": true, "matches_rdns": true },
"blacklists": { "checked": 20, "results": { "zen.spamhaus.org": "not_listed" } },
"domain_blacklists": { "checked": 8, "listed": [] },
"content": { "has_plain": true, "has_html": true, "text_ratio": 0.42,
"link_hosts": ["ornek.com"], "shortened_links": [] },
"spamassassin": { "score": 0.1, "threshold": 5.0,
"rules": [ { "name": "TO_MALFORMED", "points": 0.1, "description": "..." } ] }
},
"connection": { "client_ip": "203.0.113.10", "helo": "mx.ornek.com",
"tls": true, "tls_protocol": "TLSv1.3" }
}
}
issues içindeki points değerleri negatiftir ve toplamı 10'dan düşülür.
code alanı sabittir, kendi tarafınızda ona göre dal kurabilirsiniz.
Limitler
| Kapsam | Günlük analiz | İstek hızı |
|---|---|---|
| Anonim (IP) | 5 | 10 / dakika |
| Hesap (tarayıcı) | 25 | 10 / dakika |
| API anahtarı | 25 | 120 / dakika |
Günlük hak analiz başladığında düşer, adres alırken değil. Yani adres oluşturmak, dili
değiştirmek veya /result okumak bedava. Limit aşımında 429 ve
Retry-After başlığı döner.
Kendi sunucunuza kurarsanız bu değerlerin hepsi ortam değişkeni. Proje açık kaynak: github.com/alialinx/mail-tester
Tam örnek
#!/usr/bin/env bash
set -euo pipefail
KEY="$MAILTESTER_KEY"
BASE="https://mailtesterbox.com"
ADDRESS=$(curl -sS -X POST "$BASE/generate" -H "X-API-Key: $KEY" | jq -r .address)
echo "adres: $ADDRESS"
swaks --to "$ADDRESS" --from "test@ornek.com" --server mail.ornek.com
for i in $(seq 1 60); do
BODY=$(curl -sS "$BASE/check/$ADDRESS" -H "X-API-Key: $KEY")
STATUS=$(echo "$BODY" | jq -r .status)
[ "$STATUS" = "analyzed" ] && { echo "$BODY" | jq '.result.score, .result.issues'; break; }
[ "$STATUS" = "expired" ] || [ "$STATUS" = "limit" ] && { echo "$BODY"; exit 1; }
sleep 3
done