Aller au contenu principal

FAQ — Questions Techniques

Interprétation des résultats

Que signifie responseCode: 550 dans les résultats SMTP ?

Le code 550 (ou 551, 552, 553) indique que le serveur SMTP a explicitement rejeté l'adresse :

  • 550 5.1.1 — Utilisateur inconnu
  • 550 5.7.1 — Message refusé (politique)

Ces emails sont définitivement invalid. Ne les retentez pas.

Mon email a hasMxRecords: false mais il existe. Pourquoi ?

Cela peut arriver si :

  1. Le domaine utilise uniquement un enregistrement A/AAAA pour recevoir des emails (rare mais valide)
  2. La résolution DNS a échoué temporairement (timeout)
  3. Le domaine utilise un enregistrement MX privé ou non-standard

Qu'est-ce que le score et comment est-il calculé ?

Le score (0-100) est une combinaison pondérée de tous les checks :

SignalPoidsImpact
Syntaxe invalideÉliminatoire→ 0
Pas de MXÉliminatoire→ 0
SMTP rejetéÉliminatoire→ 0
Email jetableÉlevé-40 points
Role accountModéré-15 points
Random localModéré-20 points
SMTP valideBonus+15 points

Intégration et performance

Comment réduire la latence de l'API ?

  1. Désactivez le SMTP si non nécessaire — gain de 1-15s
  2. Mettez en cache les résultats (voir pattern ci-dessous)
  3. Utilisez le batch pour les volumes > 50 emails

Pattern de cache recommandé

import NodeCache from 'node-cache';

const emailCache = new NodeCache({
stdTTL: 24 * 3600, // 24h pour les valides
checkperiod: 3600,
});

async function validateWithCache(email: string): Promise<ValidationResult> {
const cached = emailCache.get<ValidationResult>(email);
if (cached) return cached;

const result = await callYesWeCheckApi(email);

// Ne cache que les résultats définitifs
if (result.status === 'valid' || result.status === 'invalid') {
emailCache.set(email, result);
}

return result;
}

Puis-je faire des appels en parallèle ?

Oui, mais respectez les rate limits. Pour 100 emails, faites des batches de 5-10 requêtes simultanées :

const emails = ['[email protected]', '[email protected]', /* ... */];

// Traiter 5 emails en parallèle
const results = await Promise.all(
emails.slice(0, 5).map(email => validateEmail(email))
);

// Pour de gros volumes, utilisez plutôt le batch endpoint
Pour les gros volumes

Au-delà de 50 emails, utilisez toujours POST /v2/batch/upload. C'est plus rapide, plus fiable et optimisé pour le traitement SMTP groupé par MX.


Sécurité

Les emails envoyés à l'API sont-ils stockés ?

Les emails sont temporairement loggués pour le débogage et les statistiques d'usage. Les logs sont anonymisés après 7 jours.

Voir notre Politique de confidentialité pour les détails complets.

L'API est-elle compatible RGPD ?

Oui. YesWeCheck :

  • Stocke les données dans des serveurs EU
  • Propose l'export et la suppression de compte depuis le Dashboard
  • Anonymise les logs après 7 jours

Puis-je valider des emails de test ?

Pour tester sans risque, utilisez des domaines inexistants ou des adresses avec smtp: false :

# Sans SMTP — gratuit, aucun effet de bord
curl -X POST .../v2/email/validate \
-d '{"email": "[email protected]", "smtp": false}'

Erreurs spécifiques

ACTIVE_JOB_EXISTS — Comment résoudre ?

Une seule validation batch peut tourner à la fois par organisation. Vérifiez d'abord :

curl https://api.yeswecheck.fr/v2/batch/active-job \
-H "Authorization: Bearer JWT"

Si un job est bloqué (status processing depuis longtemps), annulez-le :

curl -X POST https://api.yeswecheck.fr/v2/batch/JOB_ID/cancel \
-H "Authorization: Bearer JWT"

Mon token JWT expire trop vite

Le JWT expire après 15 minutes. Implémentez un mécanisme de refresh automatique :

class AuthClient {
private accessToken: string;
private refreshToken: string;

async request(url: string, options: RequestInit) {
const response = await fetch(url, {
...options,
headers: {
...options.headers,
'Authorization': `Bearer ${this.accessToken}`,
},
});

if (response.status === 401) {
// Token expiré — rafraîchir
await this.refresh();
// Réessayer
return this.request(url, options);
}

return response;
}

private async refresh() {
const { accessToken, refreshToken } = await fetch(
'https://api.yeswecheck.fr/v2/auth/refresh',
{
method: 'POST',
body: JSON.stringify({ refreshToken: this.refreshToken }),
}
).then(r => r.json());

this.accessToken = accessToken;
this.refreshToken = refreshToken;
}
}