Sendmail con smarthost y aunteticacion
Despues de un dolor de cabeza me decidi escribir este post para tenerlo como futura referencia y no andar buscando la informacion en otros lugares.
Problema:
Tenemos un servidor que queremos envie correos pero la ip del servidor es dinamica y ademas el puerto 25 para envio de correo esta bloqueado.
Solucion:
Usar una cuenta de correo ya existente en algun servidor que tengamos contratado y hacer que nuestro servidor le envie los correos a este servidor hosteado. A esto se le llama relay y se puede hacer de varias formas.
primero crearemos un archivo llamado client-info el servidor de correo guarda la configuracion en el directorio /etc/mail y crearemos el directorio auth dicho esto el archivo quedaria en la ruta /etc/mail/auth/client-info
AuthInfo:dominio.com "U:root" "I:usuario@dominio" "P:password" "M:LOGIN PLAIN"
Donde:
AuthInfo: es el nombre de dominio del correo
U: el usuario que enviara el correo
I: el usuario de la cuenta de correo
P: el password de la cuenta de correo
M: el metodo que utilizara para autentificarse en el servidor
Uan vez creado el archivo ejecutamos el comando
makemap hash client-info < client-info
Esto nos creara un archivo client-info.db
Ahora agregaremos la configuracion a sendmail para utilizar la cuenta de correo configurada
Editamos el archivo sendmail.mc y agregamos o quitamos el comentario a las lineas siguientes:
define(`SMART_HOST',`[dominio.com]') define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl TRUST_AUTH_MECH(`LOGIN PLAIN')dnl FEATURE(`authinfo',`hash /etc/mail/auth/client-info')dnl
Como se ve en la configuracion el SMART_HOST esta encerrado entre [] esto se hace cuando el dominio que estamos usando tiene configurado un registro MX es decir, si el servidor tiene dominio.com tal vez su registro MX que se encarga de manejar el correo para ese dominio sea mail.dominio.com
Ya que esta hecha la configuracion ejecutamos el comando y reiniciamos el servicio.
m4 sendmail.mc > sendmail.cf
Depuracion:
Si despues de hacer esto marca algun error de envio o se regresan los mensajes de correo podemos checar los logs y tratar de indentificar el problema.
Primero aumentamos el nivel del log en el sendmail
define(`confLOG_LEVEL', `20')dnl
Si con eso no es suficiente podemos crear un log con toda la sesion del sendmail para eso tenemos que detener el servicio y ejecutar
sendmail -bD -X/tmp/sendmail.log
Y despues en otra sesion enviar un correo. Esto creara un archivo en el directorio /tmp con toda la informacion de la sesion de sendmail.
Espero les sirva, saludos.