jueves, 24 de marzo de 2016

PRESTASHOP y 1and1: SMTP Authentication failed using username

Respuesta corta:

  • Servidor SMTP: smtp.1and1.es

  • usuario: tu dirección de correo

  • contraseña: la contraseña

  • Cifrado: Ninguno

  • Puerto: 25

  • NO uses la misma dirección de correo para entrar al backoffice y para enviar los correos de la tienda.

  • NO uses signos en la contraseña. Prestashop lo codifica mal al enviarlo y da como resultado password incorrecto.

  • Si tienes que cambiar la contraseña asegurate que tienes desactivada la opción de autocompletar de Chrome.

  • Pista: el número de * que muestra en el mensaje de error coincide con el número de caracteres de la clave, deben coincidir, si no lo hacen es que algo está mal. (el autocompletar en mi caso).


Respuesta larga:



Configuración de una tienda Prestashop, con hosting de 1and1. Obviamente, queremos usar el correo de 1and1, así que configuramos el servicio smtp:

Nos vamos a "Parámetros avanzados" -> "Correo electrónico"

seleccionamos "Establecer mis propios parámetros SMTP"

captura_preshop_smtp2

y veremos algo como esto:

Captura_prestashp_smtp

Al hacer la prueba de enviar correo obtengo el error "Authentication failed using username ...". ¡Si el usuario y la contraseña son correctos!

Vamos a activar los logs, para que nos diga un poco más.

en prestashop/tools/swift/Swift/Log.php

modificamos la línea:

protected $logLevel = self::LOG_NOTHING;

por esta otra:

protected $logLevel = self::LOG_EVERYTHING;

Es decir, le estamos diciendo que nos cuente todo lo que haciendo, en lugar de quedarse callado.

Al volver a hacer la prueba de envío de correo, obtenemos algo mas extenso (por privacidad he borrado direcciones IP y sobrescrito las claves con basura)
++ Forcing ESMTP mode. HELO is EHLO.
++ Forcing ESMTP mode. HELO is EHLO.
++ Trying to connect...
++ Trying to connect to SMTP server at 'smtp.1and1.es:25
<< 220 kundenserver.de (mreue002) Nemesis ESMTP Service ready
>> EHLO [***.***.***.***]
<< 250-kundenserver.de Hello [***.***.***.***] [***.***.***.***]
250-SIZE 69920427
250-AUTH LOGIN PLAIN
250 STARTTLS
++ SMTP extension 'SIZE' reported with attributes [69920427].
++ SMTP extension 'AUTH' reported with attributes [LOGIN, PLAIN].
++ SMTP extension 'STARTTLS' reported with attributes [].
++ Trying to authenticate with username 'usuario@tuservidorcorreo.com'.
++ No authenticators loaded; looking for defaults.
++ Authentication mechanism 'PLAIN' attached.
++ Authentication mechanism 'LOGIN' attached.
++ Authentication mechanism 'CRAM-MD5' attached.
++ Trying 'PLAIN' authentication...
>> AUTH PLAIN

VXN1YXJpb29vb29vb29vb29vb29vb29vb29QYXN3b29vb2b29vb29vb29vb29vb29vb29vb3JkU=
<< 535 Authentication credentials invalid
!! Expected response code(s) [235] but got response [535 Authentication credentials invalid]
>> RSET
<< 250 OK
++ Trying 'LOGIN' authentication...
>> AUTH LOGIN
<< 334 1YXJpb29vb29vb2
>> QYXN3b29vb2b29vb=
<< 334 1YXJpb29vb29vb29
>> QYXN3b29vb2b29vb=
<< 535 Authentication credentials invalid
!! Expected response code(s) [235] but got response [535 Authentication credentials invalid]
>> RSET
<< 250 OK

Que, básicamente, nos dice los mismo: ha fallado la autenticación después de intentar varios métodos distintos: PLAIN, LOGIN. En este texto no vemos la clave en plano porque el protocolo exige que vayan codificadas en base64.

Todo eso está muy bien, pero ¡mi clave es correcta!

Fui más allá y modifique el código que escribe el error para que me mostrara que clave estaba usando.

prestashop/tools/swift/Swift/Connection/SMTP.php

en la línea 141, cambié:
throw new Swift_ConnectionException("Authentication failed using username '" . $user . "' and password '". str_repeat("*", strlen($pass)) . "'");

por:
throw new Swift_ConnectionException("Authentication failed using username '" . $user . "' and password '". str_repeat("*", strlen($pass)) . "'".$pass);

Ese pequeño cambio me permitió descubrir que contraseña se estaba mandando al servidor de correo. También podemos ver, que el número de asteriscos que muestra es igual a la longitud de la clave.

Esto me permitió darme cuenta de que  había problemas con un caracter que contenia la clave. Imaginemos que mi clave era "clave+1", pues en la salida vi lo siguiente:
Authentication failed using username 'usuario@tuservidorcorreo.com' and password '*******'clave 1

Ojo a como está escrita la clave en el mensaje (que es como se envía al servidor), ¡le falta el simbolo +!

Acto seguido cambié la clave a otra mas sencilla: 'clave' pero seguia obteniendo el mismo mensaje ¡y con la misma clave sin cambiar!
Authentication failed using username 'usuario@tuservidorcorreo.com' and password '*******'clave 1

¿qué estaba pasando? ¿no se actualizaba correctamente la base de datos al grabar la nueva clave?

Lo comprobé haciendo una consulta SQL desde Prestashop: Parámetros avanzados->Gestor SQL
SELECT * FROM `ps_configuration` where name like '%PS_MAIL_PASSWD%'

Obtenia como resultado 'clave', por lo que la grabación en la base de datos era correcta. ¿que estaba pasando?

El culpable era el navegador Chrome, con su función de autocompletar. Cuando creé la cuenta de correo la primera vez (con la clave "clave+1") me preguntó si quería recordarla. Le dije que sí. A partir de ahí, cada vez que se escribe la dirección de correo rellena automáticamente el cuadro de contraseña, por lo que cuando cambiaba la contraseña en la pantalla de configuración de Prestashop volvía a escribir la antigua (con el signo +).

Entré en Chrome y borré la contraseña guardada para esa cuenta de correo y funcionó perfectamente.

 

 

0 comentarios:

Publicar un comentario