// comment corriger
PHPMailer « SMTP Error: Could not authenticate » : comment le corriger
PHPMailer échoue avec SMTP Error: Could not authenticate ? Activez le mode debug, puis corrigez l'identifiant, le port, le chiffrement ou les réglages du fournisseur.
Ce que ça veut dire
PHPMailer s'est connecté au serveur SMTP, mais le serveur a refusé l'identifiant et le mot de passe. PHPMailer affiche un message court :
SMTP Error: Could not authenticate.
Ce texte court cache la vraie raison. La réponse du serveur (souvent un code 535) n'est visible qu'avec le mode debug activé. Ne confondez pas avec SMTP connect() failed, qui signifie que PHPMailer n'a même pas pu joindre le serveur (mauvais hôte, port bloqué, problème TLS).
Pourquoi cela arrive
- Mauvais identifiant ou mot de passe. La plupart des fournisseurs veulent l'adresse email complète comme identifiant. Les mots de passe avec des caractères spéciaux peuvent être tronqués ou modifiés quand ils sont stockés dans un fichier
.envou une configuration avec des guillemets. - Le fournisseur n'accepte plus le mot de passe normal. Gmail exige un mot de passe d'application (voir Gmail 535 5.7.8 username and password not accepted). Microsoft 365 a souvent le SMTP AUTH désactivé (voir Microsoft 365 535 5.7.139).
- Identifiants SMTP spécifiques. Des services comme Amazon SES, SendGrid ou Mailgun utilisent des identifiants SMTP dédiés, et non l'identifiant de votre compte (pour SES, voir Amazon SES 535 credentials invalid).
- Mauvaise combinaison port / chiffrement. Le port 465 demande du TLS implicite (
ENCRYPTION_SMTPS) ; le port 587 demande du STARTTLS (ENCRYPTION_STARTTLS). Certains serveurs ne proposent aucune connexion avant que le chiffrement soit actif. - L'hébergeur redirige le SMTP. Certains hébergements mutualisés redirigent tout le SMTP sortant vers leur propre serveur. Votre identifiant arrive alors sur le mauvais serveur et échoue.
- Compte verrouillé ou bloqué après trop de tentatives échouées, ou contrôle de sécurité du fournisseur.
Comment vérifier
Activez le mode debug pour un seul test (ne le laissez jamais en production, il affiche l'échange de connexion) :
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
$mail = new PHPMailer(true);
$mail->isSMTP();
$mail->SMTPDebug = SMTP::DEBUG_SERVER;
$mail->Host = 'smtp.example.com';
$mail->Port = 587;
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
$mail->SMTPAuth = true;
$mail->Username = 'you@yourdomain.com';
$mail->Password = getenv('SMTP_PASSWORD');Lisez les lignes qui commencent par SERVER -> CLIENT :
- Une ligne
535aprèsAUTHdonne la raison du fournisseur (identifiants incorrects, mot de passe d'application requis, SMTP AUTH désactivé…). - Si le message d'accueil
220ou le certificat affiche un nom d'hôte qui n'est pas celui de votre fournisseur, votre hébergeur redirige le SMTP. - Si aucun
AUTHn'apparaît dans la liste250aprèsEHLO, le serveur ne propose pas de connexion sur ce port ou avant le TLS.
Testez le même identifiant en dehors de PHP avec swaks, depuis le même serveur :
swaks --server smtp.example.com:587 --tls --auth LOGIN \ --auth-user you@yourdomain.com --to you@yourdomain.com
Si swaks fonctionne, le problème vient de votre configuration PHP (guillemets autour du mot de passe, mauvaise variable). Si swaks échoue aussi, c'est le compte ou le fournisseur.
Comment corriger
- Utilisez exactement les réglages de votre fournisseur : hôte, port, chiffrement et format d'identifiant indiqués dans sa documentation.
- Stockez le mot de passe de façon sûre et vérifiez qu'il est lu correctement (affichez sa longueur pendant un test, pas le mot de passe).
- Utilisez le bon type d'identifiant : un mot de passe d'application pour Gmail, des identifiants SMTP pour SES ou d'autres services, et le SMTP AUTH activé sur la boîte pour Microsoft 365. PHPMailer prend aussi en charge OAuth2 (XOAUTH2) pour Gmail et Microsoft 365 si vous préférez ne pas utiliser de mot de passe.
- Associez le bon port au bon chiffrement : 587 avec
ENCRYPTION_STARTTLS, ou 465 avecENCRYPTION_SMTPS. - Sur un hébergement mutualisé, demandez à l'hébergeur si le SMTP sortant est redirigé, et utilisez son serveur SMTP ou autorisez le SMTP externe dans le panneau s'il le propose.
- Débloquez le compte si le fournisseur l'a bloqué, puis réessayez une seule fois plutôt qu'en boucle.
Une fois que les emails partent, assurez-vous qu'ils sont authentifiés pour votre domaine ; les formulaires de contact et les sites WordPress ont des pièges supplémentaires, traités dans les emails de votre site arrivent en spam.
Vérifiez que c'est corrigé
Relancez le script avec le mode debug : vous devez voir 235 Authentication successful (la formulation varie), puis 250 après les données du message. Mettez comme destinataire l'adresse unique affichée sur la page d'accueil de Delivmail et lisez le rapport pour vérifier le SPF, le DKIM et le DMARC. Désactivez ensuite le mode debug et envoyez au vrai destinataire.
Vérifiez que c'est corrigé
Une modification DNS peut prendre de quelques minutes à quelques heures. Ensuite, envoyez un nouvel email de test ou scannez à nouveau votre domaine.
Fiches liées
- Les emails de votre site web ou de WordPress arrivent en spamLes formulaires de contact, confirmations de commande et réinitialisations de mot de passe envoyés par votre site arrivent souvent en spam. Envoyez-les via un SMTP authentifié ou un service d'email transactionnel.
- Amazon SES SMTP « 535 Authentication Credentials Invalid » : la solutionAmazon SES refuse votre connexion SMTP avec 535 Authentication Credentials Invalid. Utilisez de vrais identifiants SMTP, la bonne Région et le bon serveur.
- Amazon SES « Throttling: Maximum sending rate exceeded » (454) : la solutionAmazon SES renvoie « Maximum sending rate exceeded » ou « Daily message quota exceeded ». Vérifiez vos quotas, ralentissez l'envoi et demandez une hausse.
- Mailgun « 401 Forbidden » : mauvaise clé API ou confusion entre région EU et USMailgun renvoie 401 Forbidden ou Unauthorized. Vérifiez le type de clé API, le nom d'utilisateur « api » et si votre domaine utilise le point d'accès US ou EU.
- Gmail SMTP « 535-5.7.8 Username and Password not accepted » (et 534-5.7.9) : la solutionLa connexion SMTP Gmail échoue en 535-5.7.8 ou 534-5.7.9 « Application-specific password required » ? Utilisez un mot de passe d'application ou OAuth.