tutte le guide

// come risolvere

Amazon SES SMTP "535 Authentication Credentials Invalid": come risolvere

Amazon SES rifiuta il tuo login SMTP con 535 Authentication Credentials Invalid. Usa vere credenziali SMTP, la Region e l'endpoint giusti, e provale.

Cosa significa

La tua applicazione, il tuo plugin o il tuo server di posta si è collegato all'endpoint SMTP di Amazon SES, ha tentato di autenticarsi e SES ha rifiutato nome utente o password:

535 Authentication Credentials Invalid

Un codice 5xx indica un errore definitivo: riprovare con le stesse impostazioni fallirà di nuovo. La connessione in sé funziona, quindi non è un problema di firewall.

Perché succede

  • Hai usato direttamente le chiavi di accesso IAM. La password SMTP di SES non è la tua secret access key AWS. Il nome utente SMTP somiglia a un access key ID (AKIA...), ma la password è derivata dalla chiave segreta con un algoritmo apposito.
  • Region sbagliata. Le credenziali SMTP sono specifiche di ogni Region AWS. Credenziali create per eu-west-1 non funzionano su email-smtp.us-east-1.amazonaws.com.
  • Utente o chiave eliminati o disattivati. Le credenziali SMTP appartengono a un utente IAM. Se quell'utente o la sua chiave di accesso sono stati eliminati o resi inattivi (per esempio durante una pulizia di sicurezza), il login fallisce.
  • Credenziali temporanee. Le password SMTP non possono essere derivate da credenziali temporanee (ruoli, chiavi di sessione STS).
  • Errori di copia e incolla: spazi in più, una password troncata o caratteri speciali (+, /, =) alterati quando vengono messi in un URL o in un file .env senza virgolette.
  • Un vecchio nome utente/password memorizzato da un plugin, mentre i valori li hai cambiati altrove.

Altri codici indicano altri problemi: 530 Authentication required significa che il tuo client non ha nemmeno provato ad autenticarsi; 535 Account not subscribed to SES significa che l'account AWS non è iscritto a SES; 554 Access denied: User ... is not authorized to perform ses:SendRawEmail significa che il login ha funzionato ma l'utente IAM non ha il permesso.

Come verificare

  1. Nella console SES apri SMTP settings nella Region che usi e annota l'endpoint esatto, per esempio email-smtp.eu-west-1.amazonaws.com. Le porte sono 25, 587 o 2587 con STARTTLS, e 465 o 2465 con TLS fin dall'inizio.
  2. In IAM trova l'utente SMTP e verifica che la sua chiave di accesso sia Active.
  3. Prova il login fuori dalla tua applicazione con swaks:
swaks --server email-smtp.eu-west-1.amazonaws.com --port 587 --tls \
  --auth LOGIN --auth-user 'AKIAEXAMPLE' --auth-password 'YOUR_SMTP_PASSWORD' \
  --from sender@yourdomain.com --to you@example.com

Se swaks ottiene 235 Authentication successful, le credenziali sono corrette e il problema è nella configurazione della tua applicazione. Se non riesci nemmeno a collegarti, consulta porta SMTP 25 bloccata o connessione scaduta (la porta 25 è limitata su EC2; usa la 587 o la 465).

Come risolvere

  1. Crea le credenziali SMTP nel modo più semplice. Console SES, Region corretta, SMTP settings, Create SMTP credentials. SES crea un utente IAM con il giusto permesso di invio e mostra una sola volta nome utente e password SMTP. Scarica il file .csv.
  2. Oppure derivale dalla chiave segreta di un utente IAM esistente con lo script della documentazione AWS, indicando la Region da cui invierai. L'utente ha bisogno del permesso ses:SendRawEmail.
  3. Inserisci i valori nella tua applicazione con l'endpoint della stessa Region. Esempio per nodemailer:
const transporter = nodemailer.createTransport({
  host: 'email-smtp.eu-west-1.amazonaws.com',
  port: 587,
  secure: false, // STARTTLS
  auth: { user: process.env.SES_SMTP_USER, pass: process.env.SES_SMTP_PASS },
});

Per Postfix, in /etc/postfix/sasl_passwd:

[email-smtp.eu-west-1.amazonaws.com]:587 AKIAEXAMPLE:YOUR_SMTP_PASSWORD

Poi esegui postmap /etc/postfix/sasl_passwd, imposta relayhost = [email-smtp.eu-west-1.amazonaws.com]:587, smtp_sasl_auth_enable = yes, smtp_tls_security_level = encrypt e ricarica Postfix.

Se usi PHPMailer o WordPress, le stesse cause producono "Could not authenticate"; consulta PHPMailer SMTP Error: Could not authenticate. Per cambiare una password SMTP, AWS consiglia di eliminare l'utente SMTP e creare nuove credenziali. Se le tue credenziali sono state create prima del 10 gennaio 2019, sostituiscile: usano una versione di firma più vecchia.

Verifica che sia risolto

Invia un messaggio dalla tua applicazione tramite SES all'indirizzo unico nella home page di Delivmail. Se arriva, l'autenticazione funziona; leggi il report per SPF, DKIM e DMARC. Se ora ricevi 554 Message rejected: Email address is not verified, il login va bene e il passo successivo è in Amazon SES "Email address is not verified".

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