Email Spam Tester

La API

Tres llamadas. Sin clave, sin cuenta, sin registro.

Reserva una dirección, envía el mensaje que estabas a punto de enviar a tu lista y consulta el informe. Todo lo que muestra la página está en el JSON, incluida la puntuación, las 41 comprobaciones con sus evidencias y la sección del estándar en la que se basa cada resultado.

Los primeros 100.000 informes son gratuitos, sin clave y sin cuenta. Si estás configurando un agente en lugar de un script, el servidor MCP es más adecuado que el sondeo.

Pruébalo en el entorno de pruebas → Cada endpoint, con un botón que lo ejecuta contra el servicio en producción. Nada de lo que hay aquí necesita una clave, así que cualquier solicitud que envíes desde esta página es real: reserva una dirección real y cuenta.

El ciclo

Dos solicitudes y un correo electrónico. La tercera llamada solo es necesaria porque el análisis tarda unos segundos.

  1. Reserva una dirección

    Haz un POST al endpoint de la bandeja de entrada. Recibirás una dirección que acepta exactamente un mensaje y caduca en una hora, además del slug con el que se identifica todo lo demás.

  2. Envíale el mensaje real

    Mediante SMTP, desde la plataforma que enviará la campaña. La mitad de las comprobaciones leen las cabeceras que añade tu plataforma de envío, por lo que un mensaje redactado a mano mide algo distinto.

  3. Consulta el estado y después el informe

    El endpoint de estado ocupa unos cientos de bytes y te indica si ya merece la pena obtener el informe completo. El informe en sí tiene varios miles de líneas.

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

Autenticación

No hay ninguna. No hay que solicitar ninguna clave, establecer ninguna cabecera ni crear ninguna cuenta. El slug que recibes es la capacidad: quien lo tenga puede leer ese informe y nadie más puede adivinarlo.

Eso también significa que conviene tratar un slug como una contraseña. Un informe muestra el asunto, el remitente, la dirección de rebote y el código fuente completo del mensaje a cualquiera que tenga el enlace.

Endpoints

Dirección base https://email-spam-tester.com. Todo responde en JSON.

POST/api/v1/inbox

Reserva una dirección de un solo uso. Ambos parámetros son opcionales.

langIdioma en el que se redactarán el plan de corrección y los resultados de cada comprobación, como código ISO. Se decide ahora porque el mensaje llega por SMTP minutos después y no contiene ninguna indicación de quién lo espera. Un código desconocido utiliza el inglés de forma predeterminada.
utm_source, utm_medium, utm_campaignSe transfieren a nuestras analíticas. Es útil si estás midiendo tu propia integración.

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

Su consulta periódica tiene un coste bajo. Devuelve los dos campos de estado y el progreso de las comprobaciones, y nada más.

Consulta periódicamente este endpoint en lugar del informe. analysis_status alcanza primero checks_ready, y el plan de IA aparece en ai_status aproximadamente un minuto después, por lo que un cliente que solo quiera las comprobaciones deterministas no tiene que esperar al plan.

GET/api/v1/tests/{slug}

El informe completo. Responde con 202 mientras la dirección está reservada y todavía no ha llegado nada, y con 200 una vez que ha llegado.

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

El mensaje exactamente como se entregó: todas las cabeceras en el orden de transmisión, ambos cuerpos, la lista de archivos adjuntos y el código fuente sin procesar. Se obtiene por separado porque el informe se consulta periódicamente y esto puede llegar a ocupar un megabyte.

El mensaje sin procesar se elimina según su propio plazo, antes que el informe. Después, este endpoint responde con el motivo en lugar del contenido original.

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

Cambia el idioma de una reserva que aún no se ha utilizado. Para un agente que averigua qué idioma lee su usuario después de haber solicitado ya la dirección. Se rechaza una vez que el mensaje ha llegado, porque para entonces el análisis está en curso.

GET/api/health

Comprobación de actividad. Sin autenticación, sin efectos secundarios.

Lectura del informe

Los campos que contienen la respuesta, en el orden en que probablemente los necesite.

score_oursDe 0 a 100. Nuestro modelo. La autenticación y la infraestructura tienen la mayor parte del peso, porque deciden la entrega antes de que un filtro lea una palabra del texto.
score_compatDe 0 a 10. Reproduce la puntuación de estilo SpamAssassin que ya se suele comparar, para que el informe sea comparable con lo que alguien haya visto en otro lugar.
subscoresLa misma escala de 0 a 100 por sección: auth, infra_spam, content, compliance.
checks[]Las 41, cada una con un estado, una conclusión de una línea, las pruebas en las que se basó la decisión y lo que restó a las dos puntuaciones.
checks[].citationsDe dónde procede el hallazgo: la sección del RFC, citada textualmente, y la página donde Google establece su propio requisito. Recopilado manualmente en lugar de generarse, por lo que se puede confiar en ello.
fixes[]Qué cambiar, en orden, con los puntos que vale cada cambio. Las mejoras se calculan volviendo a puntuar el informe, no se estiman.
completeEs falso cuando no se pudo ejecutar una comprobación. Un elemento no comprobado nunca se considera aprobado, así que trata la puntuación como optimista hasta que sea verdadero.
report_urlLa página legible para personas. Entrégasela a una persona en lugar de un bloque de JSON.

Estados

Una comprobación puede tener uno de cinco estados, y la diferencia entre dos de ellos importa más de lo que parece.

passLa comprobación se ejecutó y no encontró ningún problema.
warnConviene corregirlo. Resta puntos.
failPerjudicará la entrega. Cuesta más puntos.
omitirNo se aplicó. No hay archivos adjuntos que analizar ni parte HTML que evaluar. No es un resultado aprobado.
errorNo pudimos determinarlo. Se excluye de la puntuación y se marca, en lugar de contarse como un resultado aprobado.

analysis_status pasa por received, analyzing, checks_ready, failed. ai_status pasa por pending, running, ready, fallback, error. El informe determinista es definitivo en checks_ready; ai_status solo añade el plan.

Qué puede devolverse

202La dirección está reservada y no ha llegado ningún mensaje. El cuerpo contiene la dirección, la fecha de expiración y el idioma, por lo que quien realiza la llamada puede mostrarlos aunque no haya creado la reserva.
404No existe ese slug. Nunca existió o se olvidó la reserva.
410La dirección expiró antes de que llegara un mensaje.
409Intentaste cambiar el idioma después de que el mensaje ya hubiera llegado.
429El límite de pruebas gratuitas para tu dirección. Actualmente no hay ningún límite por persona en este servicio; si alguna vez se establece uno, el cuerpo indica cuándo se restablece.

Cuatro cosas que conviene saber

Un mensaje por dirección

El segundo se rechaza. Tu informe anterior permanece intacto, que es precisamente el objetivo.

Una hora para usarla

La dirección caduca; el informe no. Los enlaces a los informes son permanentes, así que uno pegado en un ticket sigue funcionando.

Envía desde la plataforma

Probar una campaña desde una cuenta personal mide esa cuenta. Casi todo lo que aparece en la sección de autenticación se refiere a la infraestructura de envío, no al texto.

Repite la prueba después de corregir

Las mejoras esperadas se calculan para una corrección cada vez y no son acumulativas. El segundo informe muestra la cifra real.

Para máquinas

Prueba primero uno manualmente

Tarda aproximadamente un minuto y te muestra exactamente lo que describe el JSON.

Obtener una dirección de prueba