todas las guías

// cómo solucionarlo

Amazon SES SMTP "535 Authentication Credentials Invalid": cómo solucionarlo

Amazon SES rechaza tu inicio de sesión SMTP con 535 Authentication Credentials Invalid. Usa credenciales SMTP reales, la región y el endpoint correctos, y pruébalas.

Qué significa

Tu aplicación, plugin o servidor de correo se ha conectado al endpoint SMTP de Amazon SES, ha intentado iniciar sesión y SES ha rechazado el usuario o la contraseña:

535 Authentication Credentials Invalid

Un código 5xx indica un error permanente: si vuelves a intentarlo con la misma configuración, fallará otra vez. La conexión en sí funciona, así que no es un problema de cortafuegos.

Por qué ocurre

  • Has usado directamente las claves de acceso IAM. La contraseña SMTP de SES no es tu clave de acceso secreta de AWS. El usuario SMTP se parece a un ID de clave de acceso (AKIA...), pero la contraseña se obtiene a partir de la clave secreta con un algoritmo especial.
  • Región equivocada. Las credenciales SMTP son propias de cada región de AWS. Las credenciales creadas para eu-west-1 no funcionan en email-smtp.us-east-1.amazonaws.com.
  • Usuario o clave eliminados o desactivados. Las credenciales SMTP pertenecen a un usuario IAM. Si ese usuario o su clave de acceso se han eliminado o desactivado (por ejemplo, durante una limpieza de seguridad), el inicio de sesión falla.
  • Credenciales temporales. Las contraseñas SMTP no se pueden obtener a partir de credenciales temporales (roles, claves de sesión STS).
  • Errores al copiar y pegar: espacios de más, una contraseña recortada o caracteres especiales (+, /, =) estropeados al ponerlos en una URL o en un archivo .env sin comillas.
  • Un usuario o contraseña antiguos guardados por un plugin, mientras tú cambiaste los valores en otro sitio.

Otros códigos indican otros problemas: 530 Authentication required significa que tu cliente ni siquiera ha intentado iniciar sesión; 535 Account not subscribed to SES significa que la cuenta de AWS no está dada de alta en SES; 554 Access denied: User ... is not authorized to perform ses:SendRawEmail significa que el inicio de sesión ha funcionado, pero el usuario IAM no tiene el permiso necesario.

Cómo comprobarlo

  1. En la consola de SES, abre SMTP settings en la región que usas y anota el endpoint exacto, por ejemplo email-smtp.eu-west-1.amazonaws.com. Los puertos son 25, 587 o 2587 con STARTTLS, y 465 o 2465 con TLS desde el principio.
  2. En IAM, busca el usuario SMTP y comprueba que su clave de acceso está Active.
  3. Prueba el inicio de sesión fuera de tu aplicación 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

Si swaks obtiene 235 Authentication successful, las credenciales son buenas y el problema está en la configuración de tu aplicación. Si ni siquiera consigues conectarte, consulta puerto SMTP 25 bloqueado o tiempo de conexión agotado (el puerto 25 está restringido en EC2; usa el 587 o el 465).

Cómo solucionarlo

  1. Crea las credenciales SMTP de la forma sencilla. Consola de SES, región correcta, SMTP settings, Create SMTP credentials. SES crea un usuario IAM con el permiso de envío adecuado y muestra una sola vez el usuario y la contraseña SMTP. Descarga el archivo .csv.
  2. O genéralas a partir de la clave secreta de un usuario IAM existente con el script de la documentación de AWS, indicando la región desde la que vas a enviar. El usuario necesita el permiso ses:SendRawEmail.
  3. Pon los valores en tu aplicación con el endpoint de esa misma región. Ejemplo para 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 },
});

Para Postfix, en /etc/postfix/sasl_passwd:

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

Después ejecuta postmap /etc/postfix/sasl_passwd, configura relayhost = [email-smtp.eu-west-1.amazonaws.com]:587, smtp_sasl_auth_enable = yes, smtp_tls_security_level = encrypt y recarga Postfix.

Si usas PHPMailer o WordPress, las mismas causas producen "Could not authenticate"; consulta PHPMailer SMTP Error: Could not authenticate. Para cambiar una contraseña SMTP, AWS recomienda eliminar el usuario SMTP y crear credenciales nuevas. Si tus credenciales se crearon antes del 10 de enero de 2019, sustitúyelas: usan una versión de firma antigua.

Comprueba que está solucionado

Envía un mensaje desde tu aplicación a través de SES a la dirección única de la página de inicio de Delivmail. Si llega, la autenticación funciona; revisa en el informe SPF, DKIM y DMARC. Si ahora recibes 554 Message rejected: Email address is not verified, el inicio de sesión está bien y el siguiente paso está en Amazon SES "Email address is not verified".

Comprueba que está solucionado

Un cambio de DNS puede tardar de unos minutos a unas horas. Después, envía un nuevo email de prueba o vuelve a escanear tu dominio.

Guías relacionadas