Buenas.
He visto que muchas de las consultas, tanto en la lista como fuera de
ella (por ejemplo, en los propios foros de Zimbra), versan sobre los
errores al enviar correo.
En mi opinión, los técnicos a menudo pecamos de algo: mientras nos
empeñamos en aprender a manejar cosas cada vez más complicadas,
pasamos por alto conocimientos muy simples que nos pueden resultar más
útiles. Como por ejemplo, los protocolos de comunicación. En este caso
SMTP.
Entender un poco SMTP ha sido una de las mejores inversiones que he
podido hacer como técnico, y por eso he decidido tratarlo en este
tema.
Hoy empezamos por los errores.
SMTP funciona mediante peticiones del cliente al servidor. Para cada
petición del cliente (como EHLO, MAIL FROM, RCPT TO...), el servidor
genera una respuesta en forma de código. Si aprendemos a leer esos
códigos, sabremos qué nos dice el servidor con cada operación que
intentamos hacer.
Estos códigos están compuestos de tres dígitos, como 550, 250, 421...
Los que trabajéis con servidores web os daréis cuenta de que esto se
parece mucho a las respuestas de HTTP (no es por casualidad; la idea
es la misma).
Cada dígito significa una cosa, dependiendo de su posición. Así, el
primer dígito representa la reacción del servidor frente a una
petición concreta:
2** El servidor ha procesado la operación que le solicitó el cliente.
3** El servidor está aceptando la petición del cliente, pero le faltan
más datos para procesarla.
4** Respuesta negativa temporal. La petición no se ha procesado, pero
puede volver a realizarse ya que el servidor, técnicamente, puede
atenderla..
5** Respuesta negativa permanente: el servidor nos dice que no puede
procesar esa petición. Intentarlo de nuevo sin solucionar el problema
no servirá de nada.
Sólo con esto ya tenemos una buena base para diagnosticar muchas
incidencias de correo: normalmente, si empieza por 4 ó 5, malo...
Por cierto, la historia del dígito 1 es curiosa: está previsto para
cierto tipo de mensajes, pero la propia naturaleza de SMTP impide que
ese tipo de mensajes pueda existir. Estos romanos están locos ;-)
El segundo dígito nos especifica el porqué del primer dígito:
*0* Nos está diciendo algo sobre la sintaxis de la petición.
Normalmente aparece en errores, aunque el código 200 es el estándar de
OK (no nos dice nada, salvo que ha hecho lo que hemos pedido).
*1* Respuesta a una petición de información (por ejemplo a HELP).
*2* Nos dice algo sobre la conexión.
*3* No se usa.
*4* No se usa.
*5* Se refiere al servidor o al sistema de correo.
Existen también errores 6 y 7 en este dígito, pero están definidos
como mejoras del protocolo en las RFCs 1893 y 2034, y no todos los
servidores de correo los soportan.
El tercer dígito no tiene un significado propio, y simplemente nos
concreta el tipo de respuesta. Muchos códigos están estandarizados, y
este tercer dígito sirve para indicarnos esos errores comunes.
Por ejemplo, tanto el error 451 como el 452 son errores temporales de
servidor: pero el tercer dígito nos indica en el primer caso que ha
habido un error al procesar el correo, y en el segundo, que no se
puede procesar el correo porque no hay espacio en disco.
Todo esto viene definido en las siguientes RFC:
RFC821 (la primera)
http://www.faqs.org/rfcs/rfc821.html
RFC2821
http://www.faqs.org/rfcs/rfc2821.html
Y mejorado en:
RFC2034
http://www.rfc-editor.org/rfc/rfc2034.txt
RFC1893
http://www.rfc-editor.org/rfc/rfc1893.txt
También podemos ver una explicación muy sencilla en la Wikipedia:
http://es.wikipedia.org/wiki/SMTP
Y un par de listados de errores y explicaciones sobre el protocolo:
http://www.mailserverblog.com/2008/12/smtp-responses-and-error-codes.html
(incluye explicaciones bonitas del workflow del protocolo).
http://www.greenend.org.uk/rjk/2000/05/21/smtp-replies.html (muy
buena, vienen los errores organizados por los comandos a los que
responden).
http://lo-wiki.acor.org/index.php/SMTP_Error_Codes (explica los
errores más comunes detalladamente).
También he subido a la sección de Archivos del grupo un PDF muy majo
con el listado de errores.
Y eso es todo por hoy. Recomiendo echarle un ojo a la RFC821.
En otro momento deberíamos hablar de los comandos SMTP (a los que
responden los códigos de los que hemos hablado ahora), y sobre todo,
de las cabeceras de los mensajes (interpretarlas puede ser todo un
arte).
Venga, a ver quién se anima.
Saludotes.