// come risolvere
PHPMailer "SMTP Error: Could not authenticate": come risolvere
PHPMailer fallisce con SMTP Error: Could not authenticate? Attiva l'output di debug, poi correggi login, porta, cifratura o impostazioni del provider.
Cosa significa
PHPMailer si è connesso al server SMTP, ma il server ha rifiutato nome utente e password. PHPMailer mostra un breve messaggio:
SMTP Error: Could not authenticate.
Questo testo breve nasconde il vero motivo. La risposta del server (spesso un codice 535) è visibile solo con l'output di debug attivo. Non confonderlo con SMTP connect() failed, che significa che PHPMailer non è nemmeno riuscito a raggiungere il server (host sbagliato, porta bloccata, problema TLS).
Perché succede
- Nome utente o password errati. La maggior parte dei provider vuole l'indirizzo email completo come nome utente. Le password con caratteri speciali possono essere troncate o alterate quando vengono salvate in un file
.envo in una configurazione con virgolette. - Il provider non accetta più la password normale. Gmail richiede una password per app (vedi Gmail 535 5.7.8 username and password not accepted). Microsoft 365 ha spesso SMTP AUTH disattivato (vedi Microsoft 365 535 5.7.139).
- Credenziali SMTP specifiche. Servizi come Amazon SES, SendGrid o Mailgun usano credenziali SMTP dedicate, non il login del tuo account (per SES, vedi Amazon SES 535 credenziali non valide).
- Coppia porta e cifratura sbagliata. La porta 465 richiede TLS implicito (
ENCRYPTION_SMTPS); la porta 587 richiede STARTTLS (ENCRYPTION_STARTTLS). Alcuni server non offrono affatto il login prima che la cifratura sia attiva. - L'hosting reindirizza SMTP. Alcuni hosting condivisi indirizzano tutto lo SMTP in uscita verso il proprio server. Il tuo login arriva quindi al server sbagliato e fallisce.
- Account bloccato dopo troppi tentativi falliti, o per un controllo di sicurezza del provider.
Come verificare
Attiva l'output di debug per un solo test (non lasciarlo mai attivo in produzione, mostra lo scambio di login):
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');Leggi le righe che iniziano con SERVER -> CLIENT:
- Una riga
535dopoAUTHindica il motivo del provider (credenziali errate, password per app richiesta, SMTP AUTH disattivato…). - Se il saluto
220o il certificato mostrano un hostname che non è quello del tuo provider, il tuo hosting sta reindirizzando SMTP. - Se nessun
AUTHcompare nell'elenco250dopoEHLO, il server non offre il login su questa porta o prima di TLS.
Testa lo stesso login fuori da PHP con swaks, dallo stesso server:
swaks --server smtp.example.com:587 --tls --auth LOGIN \ --auth-user you@yourdomain.com --to you@yourdomain.com
Se swaks funziona, il problema è nella tua configurazione PHP (virgolette nella password, variabile sbagliata). Se anche swaks fallisce, il problema è l'account o il provider.
Come risolvere
- Usa esattamente le impostazioni del tuo provider: host, porta, cifratura e formato del nome utente indicati nella sua documentazione.
- Conserva la password in modo sicuro e verifica che venga letta correttamente (durante un test stampa la sua lunghezza, non la password).
- Usa il tipo di credenziale giusto: una password per app per Gmail, credenziali SMTP per SES o altri servizi, e SMTP AUTH attivato sulla casella per Microsoft 365. PHPMailer supporta anche OAuth2 (XOAUTH2) per Gmail e Microsoft 365 se preferisci non usare password.
- Abbina porta e cifratura: 587 con
ENCRYPTION_STARTTLS, oppure 465 conENCRYPTION_SMTPS. - Su un hosting condiviso, chiedi all'hosting se lo SMTP in uscita viene reindirizzato, e usa il loro server SMTP o consenti lo SMTP esterno dal pannello, se lo offrono.
- Sblocca l'account se il provider lo ha bloccato, poi riprova una sola volta invece che in un ciclo.
Quando la posta parte, assicurati che sia autenticata per il tuo dominio; i moduli di contatto e i siti WordPress hanno altre insidie trattate in le email del sito finiscono nello spam.
Verifica che sia risolto
Esegui di nuovo lo script con il debug attivo: dovresti vedere 235 Authentication successful (la formulazione varia) e poi 250 dopo i dati del messaggio. Imposta come destinatario l'indirizzo unico indicato nella home page di Delivmail e leggi il report per controllare SPF, DKIM e DMARC. Poi disattiva il debug e invia al destinatario reale.
Verifica che sia risolto
Una modifica DNS può richiedere da pochi minuti a qualche ora. Poi invia una nuova email di test o scansiona di nuovo il tuo dominio.
Guide correlate
- Le email del tuo sito o di WordPress finiscono nello spamModuli di contatto, conferme d'ordine e reimpostazioni della password inviati dal tuo sito finiscono spesso nello spam. Inviali tramite SMTP autenticato o un servizio di email transazionali.
- Amazon SES SMTP "535 Authentication Credentials Invalid": come risolvereAmazon SES rifiuta il tuo login SMTP con 535 Authentication Credentials Invalid. Usa vere credenziali SMTP, la Region e l'endpoint giusti, e provale.
- Amazon SES "Throttling: Maximum sending rate exceeded" (454): come risolvereAmazon SES restituisce "Maximum sending rate exceeded" o "Daily message quota exceeded". Controlla le quote, rallenta gli invii e chiedi un aumento.
- Mailgun "401 Forbidden": chiave API sbagliata o regione EU/US non corrispondenteMailgun restituisce 401 Forbidden o Unauthorized. Controlla il tipo di chiave API, il nome utente "api" e se il tuo dominio usa l'endpoint US o EU.
- Gmail SMTP "535-5.7.8 Username and Password not accepted" (e 534-5.7.9): come risolvereIl login SMTP di Gmail fallisce con 535-5.7.8 o 534-5.7.9 "Application-specific password required"? Usa una password per le app o OAuth al posto della password.