Es posible que de vez en cuando observes el siguiente error en exim cuando tu servidor intenta enviar un email:
T=remote_smtp defer (-53): retry time not reached for any host
Vamos a ver la guía definitiva para solucionar el problema.
Contenidos
¿Qué significa el error?
El error significa que tu servidor ha estado intentando enviar el email a otro servidor pero no lo ha logrado, por lo que el email sigue en al cola de exim. Lo primero que debes intentar es procesar la cola de exim para forzar el envío de todos los emails en la cola.
Seguidamente debes volver a consultar la cola de exim para comprobar si los emails con dicho error han sido enviados, por lo que debemos ejecutar el siguiente comando:
exim -bp
Si tus emails han sido enviados, podrás dormir tranquilo, ya que podría tratarse de un problema de red temporal de la empresa que aloja tu servidor. En caso de que los emails sigan en la cola, tendremos un problema.
Cómo solucionar el problema
Lo primero que tenemos que hacer es comprobar que nuestra dirección IP no está en ninguna de las listas negras existentes, ya que en este caso, los servidores bloquearán nuestra IP y no aceptarán los emails de nuestro servidor. Esto suele ocurrir cuando nuestro servidor ha estado enviando SPAM a otros servidores.
Si nuestra IP no está en ninguna lista negra, el error significa que nuestro servidor ha desistido en enviar los correos tras un montón de intentos, ya que ha sido siempre rechazado. El problema puede deberse a varias causas
Nuestro puerto SMTP ha sido bloqueado
Algo que no se suele contemplar es que el error esté en nuestra propia casa, es decir, que nuestro puerto SMTP haya sido bloqueado a nivel de red por la empresa que aloja nuestro servidor, algo muy habitual si hemos estado enviado spam por algún motivo. Lo primero que tenemos que hacer es probar nuestro puerto SMTP, que suele ser el 25 o el 587.
En caso de que el puerto no funcione, es posible que el proveedor de nuestro servidor nos lo haya comunicado mediante un email, pero quizás se nos ha pasado o no nos lo han enviado. El segundo paso será consultar nuestro email por si encontramos el correo, en el que también encontraremos las instrucciones para desbloquear el puerto cuando el error haya sido solventado. Puede que tengamos que contactar con nuestro proveedor mediante teléfono o mediante email, aunque también es posible que dispongan de alguna opción para desboquearlo desde un panel de administración. El puerto SMTP suele ser el 25, aunque también suele utilizarse el puerto 587.
Si este ha sido vuestro caso, el error habrá sido arreglado al solucionar el problema. De lo contrario, seguid leyendo.
El servidor de destino bloquea nuestras conexiones al puerto SMTP
Debemos indagar el servidor MTP que usa el otro servidor. Para ello podemos utilizar el comando host. Vamos a ver un ejemplo:
host outlook.com # outlook.com has address 132.245.21.82 # outlook.com has address 132.245.23.242 # outlook.com has address 132.245.81.130 # outlook.com mail is handled by 10 mx3.hotmail.com. # outlook.com mail is handled by 10 mx4.hotmail.com. # outlook.com mail is handled by 10 mx1.hotmail.com.
Ahora tenemos que aseugranos de que el servidor acepta conexiones al puerto 25 o al puerto 587 sin errores:
telnet mx3.hotmail.com 25 Trying 65.54.188.72... Connected to mx3.hotmail.com. Escape character is '^]'. 220 BAY004-MC1F11.hotmail.com Sending unsolicited... etc.
Si algo va mal, el problema será del destinatario, ya sea porque nos ha metido en una lista negra a nivel de servidor o porque su puerto está temporalmente deshabilitado.
En caso de que todo funcione bien, debemos asegurarnos de que la base de datos de exim no está corrupta.
¿Está la base de datos de exim corrupta?
Es una posibilidad, así que debemos ejecutar los siguientes comandos para asegurarnos de poner todo en orden:
/etc/sbin/exim_tidydb -t 1d /var/spool/exim retry > /dev/null /usr/sbin/exim_tidydb -t 1d /var/spool/exim reject > /dev/null /usr/sbin/exim_tidydb -t 1d /var/spool/exim wait-remote_smtp > /dev/null
Ahora procesamos de nuevo la cola de exim y comprobamos si los emails han sido enviado mediante el comando exim -bp. Si siguen en al cola, aún existe otra posibilidad. Debemos asegurarnos de que la IP del destinatario no está bloqueada en la propia base de datos de exim en nuestro servidor.
Liberar la IP del destinatario en la base de datos de EXIM
El primer paso será detener exim:
service exim stop
Ahora debemos hacer una copia de seguridad del directorio «/var/spool/exim/db/» para revertir los cambios en caso de obtener algún error.
Seguidamente borramos los siguientes archivos:
rm -rf retry rm -rf ratelimit
Por último, volvemos a iniciar exim:
service exim start
Todo debería funcionar correctamente.