
# Tester le fournisseur d'e-mail

`POST /v1/email-provider:test` · autorisation `email-provider:write` · tous les forfaits

Vérifie la connexion enregistrée sans envoyer de message :

- `customer_smtp` : se connecte à votre serveur, met en place TLS, s'authentifie puis se déconnecte.
- `customer_api` : appelle un point de terminaison en lecture seule de votre fournisseur avec la clé enregistrée.

La réponse est `200 OK` même lorsque la vérification échoue : `result` vaut `ok` ou un code d'erreur fixe. Le texte de réponse du serveur n'est jamais renvoyé. Le résultat est enregistré dans `last_test_at` et `last_test_result` de [get](get.md) ; l'`ETag` ne change pas. Chaque test écrit un enregistrement d'audit (`email_provider.tested`).

Un environnement peut effectuer 10 tests par heure. Le corps est facultatif ; si vous en envoyez un, il doit être un objet JSON vide.

## Réponse

| Champ | Type | Description |
|---|---|---|
| `result` | string | `ok` ou un code d'erreur (ci-dessous). |
| `tested_at` | string | Date et heure du test. |
| `version` | integer | La version de configuration qui a été testée. |

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

Résultats courants :

| Résultat | Signification |
|---|---|
| `ok` | Connecté et authentifié. |
| `smtp_auth_failed` | Le serveur SMTP a refusé le nom d'utilisateur ou le mot de passe. |
| `smtp_auth_unsupported` | Le serveur ne propose aucun mécanisme AUTH pris en charge. |
| `smtp_tls_required` | Le serveur sur le port 587 ne propose pas STARTTLS. |
| `smtp_tls_invalid` | Le certificat du serveur n'est pas valide pour le nom d'hôte. |
| `smtp_temporary`, `smtp_rejected` | Le serveur a répondu par une erreur temporaire ou permanente. |
| `esp_auth_failed` | Le fournisseur a refusé la clé. |
| `esp_access_denied` | Le fournisseur a refusé la clé, ou la clé ne dispose pas de l'accès en lecture au point de terminaison vérifié (par exemple `ses:GetAccount`, ou une clé d'envoi de domaine Mailgun). L'envoi peut tout de même fonctionner. |
| `esp_rate_limited`, `esp_temporary`, `esp_rejected` | Le fournisseur a limité le débit, est temporairement indisponible ou a refusé la requête. |
| `egress_dns_failed`, `egress_dns_private`, `egress_ssrf_blocked`, `egress_connect_failed`, `egress_timeout`, `egress_tls_invalid` | L'hôte ne se résout pas, se résout vers une adresse privée, est bloqué, n'a pas pu être joint dans le délai imparti, ou (fournisseurs API) a présenté un certificat invalide. |
| `delivery_credentials_invalid` | L'identifiant enregistré ne peut pas être utilisé ; enregistrez-le de nouveau. |
| `delivery_mode_unavailable` | L'envoi sortant n'est pas activé dans ce déploiement. |

## Erreurs

| HTTP | code | Quand |
|---|---|---|
| 400 | `unknown_field` | Le corps n'est pas un objet JSON vide. |
| 409 | `conflict` | Le mode n'a aucune connexion à tester (`platform_default`, `customer_webhook`, `platform_managed_domain` ; testez un point de terminaison webhook avec [Tester un point de terminaison webhook](../webhook-endpoints/test.md) ; vérifiez un domaine d'expédition avec [verify](../email-sender-domains/verify.md)), ou la configuration a changé pendant le test. |
| 429 | `rate_limited` | La limite horaire de tests ou la limite de débit de l'API a été atteinte ; réessayez après la durée indiquée par `Retry-After`. |
| 401 | `unauthenticated` | L'identifiant est absent, invalide ou révoqué. |
| 403 | `insufficient_permissions` | L'identifiant ne dispose pas de l'autorisation requise. |
| 503 | `service_unavailable` | Une dépendance est temporairement indisponible ; réessayez après la durée indiquée par `Retry-After`. |

## Exemple

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

CLI : `keenauth email-provider test`
