
# Probar el proveedor de correo electrónico

`POST /v1/email-provider:test` · permiso `email-provider:write` · todos los planes

Comprueba la conexión guardada sin enviar ningún mensaje:

- `customer_smtp`: se conecta a su servidor, configura TLS, se autentica y cierra la conexión.
- `customer_api`: llama a un endpoint de solo lectura de su proveedor con la clave guardada.

La respuesta es `200 OK` aunque la comprobación falle: `result` es `ok` o un código de error fijo. El texto de respuesta del propio servidor nunca se devuelve. El resultado se guarda en `last_test_at` y `last_test_result` de [get](get.md); el `ETag` no cambia. Cada prueba escribe un registro de auditoría (`email_provider.tested`).

Un entorno puede ejecutar 10 pruebas por hora. El cuerpo es opcional; si envía uno, debe ser un objeto JSON vacío.

## Respuesta

| Campo | Tipo | Descripción |
|---|---|---|
| `result` | string | `ok` o un código de error (abajo). |
| `tested_at` | string | Momento de la prueba. |
| `version` | integer | La versión de configuración que se probó. |

```json
{
  "result": "smtp_auth_failed",
  "tested_at": "2026-10-19T09:30:00Z",
  "version": 4
}
```

Resultados habituales:

| Resultado | Significado |
|---|---|
| `ok` | Conectado y autenticado. |
| `smtp_auth_failed` | El servidor SMTP rechazó el nombre de usuario o la contraseña. |
| `smtp_auth_unsupported` | El servidor no ofrece ningún mecanismo AUTH compatible. |
| `smtp_tls_required` | El servidor en el puerto 587 no ofrece STARTTLS. |
| `smtp_tls_invalid` | El certificado del servidor no es válido para el nombre de host. |
| `smtp_temporary`, `smtp_rejected` | El servidor respondió con un error temporal o permanente. |
| `esp_auth_failed` | El proveedor rechazó la clave. |
| `esp_access_denied` | El proveedor rechazó la clave o la clave carece de acceso de lectura al endpoint comprobado (por ejemplo, `ses:GetAccount`, o una clave de envío de dominio de Mailgun). Es posible que el envío siga funcionando. |
| `esp_rate_limited`, `esp_temporary`, `esp_rejected` | El proveedor limitó la frecuencia de solicitudes, no está disponible temporalmente o rechazó la solicitud. |
| `egress_dns_failed`, `egress_dns_private`, `egress_ssrf_blocked`, `egress_connect_failed`, `egress_timeout`, `egress_tls_invalid` | El host no se resuelve, se resuelve a una dirección privada, está bloqueado, no se pudo alcanzar a tiempo o (proveedores de API) presentó un certificado no válido. |
| `delivery_credentials_invalid` | La credencial guardada no se puede usar; guárdela de nuevo. |
| `delivery_mode_unavailable` | El envío saliente no está habilitado en esta implementación. |

## Errores

| HTTP | código | Cuándo |
|---|---|---|
| 400 | `unknown_field` | El cuerpo no es un objeto JSON vacío. |
| 409 | `conflict` | El modo no tiene una conexión que probar (`platform_default`, `customer_webhook`, `platform_managed_domain`; pruebe un endpoint de webhook con [Probar un endpoint de webhook](../webhook-endpoints/test.md); compruebe un dominio de remitente con [verificar](../email-sender-domains/verify.md)), o la configuración cambió durante la prueba. |
| 429 | `rate_limited` | Se alcanzó el límite horario de pruebas o el límite de frecuencia de la API; reintente después del periodo indicado en `Retry-After`. |
| 401 | `unauthenticated` | La credencial falta, no es válida o fue revocada. |
| 403 | `insufficient_permissions` | La credencial carece del permiso requerido. |
| 503 | `service_unavailable` | Una dependencia no está disponible temporalmente; reintente después del periodo indicado en `Retry-After`. |

## Ejemplo

```bash
curl -X POST https://api.eu.keenauth.com/v1/email-provider:test \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY"
```

CLI: `keenauth email-provider test`
