lunes, 9 de noviembre de 2015

Envío de correos desde scripts


¡Hola de nuevo!
Esta vez traigo una entrada muy interesante y útil (como todas XD) para poder mandar mails desde scripts.
Esta misma semana me he tenido que repasar como hacerlo dado que quería desarrollar un script y desde él a través del comando mail mandar correos.
¿Cómo lo vamos a hacer? Ante todo fácil, sólo para mandar correos no necesitamos configurar un servidor de correo completo, ni configurar las DNS para el correo entrante con un dominio propio, etc.
Existen varias opciones para poder satisfacer la necesidad de envío de correos, me centraré en dos opciones que considero las más fáciles como son Exim4 y sSMTP. Exim4 sólo lo configuraremos para envíar correos.
Configuraremos tanto sSMTP como Exim4 para que envíen correos a través de otro servidor de correo. Básicamente configuraremos sSMTP y Exim4 como configuramos por ejemplo nuestras cuentas de correos en nuestros smartphones a través de una app de gestión de correos, en las que les proporcionamos los parámetros de envío y recepción de correos del servidor.En nuestro caso, en esta entrada los configuraremos través de gmail, usando una cuenta ficticia info.ejemplo@gmail.com cuya contraseña será Passcuentainfo.ejemplo.
En vez de a través de gmail podríamos configurarlos con cualquier otro servidor de correo, por ejemplo, uno que tengamos montado en nuestras empresas.

sSMTP

sSMTP es MTA simple (no es un servidor de correo completo) para enviar correos desde una máquina a través de otro servidor de correos. Es una herramienta sencilla, liviana, segura (cuando se utiliza adecuadamente) y no hace uso de demonios con el consiguiente ahorro de recursos. A diferencia de Exim4, sSMTP no recibe correo, no hace uso de alias ni administra colas.
De forma general un componente importante de la seguridad del correo electrónico, además del uso de la firma digital y el cifrado, es la protección de sus intercambios de autenticación para las conexiones con los servidores de correo, sSMTP proporciona funcionalidad para el uso de TLS / SSL para proteger las conexiones con el servidor SMTP.


Exim4

Exim4 a grandes rasgos es un servidor de correo monolítico completo con un formato de configuración sencillo por lo que resulta más fácil de configurar que otros servidores de correo como Sendmail. Con un dominio propio y las DNS correctamente configuradas Exim4 puede gestionar el envío y  la recepción de correos desde/ hacia dicho dominio. Exim4 sí hace uso de demonios para su funcionamiento.

Instalación, configuración sSMTP

La instalación y configuración la llevaremos a cabo en una máquina Gnu/Linux con Debian. En la Red hay muchos recursos al respecto pero quería hacer "mi versión" con mis palabras para quizás hacerlo si cabe más claro.

Instalamos ssmtp y mailutils
#apt-get install ssmtp mailutils

A continuación configuraremos sSMTP editando el fichero de configuración /etc/ssmtp/ssmtp.conf. Antes es de "buena educación" hacer una copia de dicho fichero por si nos liamos y algo va mal, siempre podamos contar con el original.

Hacemos una copia del fichero de configuración
#cp /etc/ssmtp/ssmtp.conf /etc/ssmtp/ssmtp.conf_original
Editamos /etc/ssmtp/ssmtp.conf con nuestro editor favorito, yo utilizaré nano
#nano /etc/ssmtp/ssmtp.conf

Ahora se muestra el contenido del fichero comentando/ aclarando un poco cada parámetro

#
# Config file for sSMTP sendmail
#
# The person who gets all mail for userids < 1000
# Make this empty to disable rewriting.

#Esta cuenta es la que recibiría los correos, pondremos la cuenta de gmail que configuraremos o la dejamos #en blanco ya que no gestionaremos con ssmtp la recepción de correos
root=info.ejemplo@gmail.com

# The place where the mail goes. The actual machine name is required no
# MX records are consulted. Commonly mailhosts are named mail.domain.com

#Servidor de correos que usaremos para enviar los correos
mailhub=smtp.gmail.com:587
AuthUser=info.ejemplo@gmail.com
AuthPass=Passcuentainfo.ejemplo

#Añadiremos las siguientes dos líneas para decirle a ssmtp que cifre las comunicaciones con el server
UseTLS=Yes
UseSTARTTLS=Yes


# Where will the mail seem to come from?

#Es el nombre del dominio que queremos mostrar como enviador, pero sólo será visible si abrimos el correo #con las cabeceras de lo contrario veremos la cuenta de gmail que configuremos para el envío
#Ejemplo de correo de pueba X-Google-Original-From: "root" <root@micasa.com>rewriteDomain=micasa.com
# The full hostname

#Si abrimos el correo original con las cabeceras veremos una línea que hace referencia a este parámetro
#Ejemplo línea mensaje original correo de prueba Received: from sysinfo
hostname=sysinfo


Hasta aquí lo relacionado con el contenido de ssmtp.conf

Esta configuración tiene un problema claro de seguridad tanto en cuanto la clave de la cuenta que utilizaremos para enviar correos aparece en claro. Realmente no es lo suyo, sería más adecuado que se le pudiera pasar un fichero con la clave cifrada en él. Una vez más debemos alcanzar un equilibrio entre funcionalidad y seguridad.
Para asegurarlo un poco, lo protegeremos por permisos y cambiaremos su propietario a root y su grupo a mail.

#chmod 640 /etc/ssmtp/ssmtp.conf
#chown root:mail /etc/ssmtp/ssmtp.conf


Hay que tener en cuenta que tendremos que añadir al grupo mail los usuarios del sistema a los que queramos permitir enviar correos, por ejemplo, si quisiéramos permitir al usuario josemaria enviar correos deberíamos ademas ejecutar:

#adduser josemaria mail


Instalación, configuración Exim4

La instalación y configuración de Exim4 la llevaremos a cabo en una máquina Gnu/Linux con Ubuntu Server en esta ocasión. En la Red hay muchos recursos al respecto pero quería hacer también con Exim4 "mi versión".
Una cuestión importante a la hora de hacer uso y antes de instalar Exim4, es que si tenemos instalado Sendmail debemos desinstalarlo porque pueden surgir problemas de incompatibilidades.
#apt-get purge sendmail

Instalamos Exim4
#apt-get install -f exim4

Configuramos Exim4
#dpkg-reconfigure exim4-config
 
 


Seleccionamos enviar a través de smarthost porque haremos uso de otro server para enviar los correos.

Establecemos nombre de sistema de correo por ejemplo correo.prueba.es.


Aceptamos las direcciones ipv4 e ipv6 que aparecen.

Otros dominios con los que se configura el correo lo dejamos en blanco.

Otras máquinas a las que reenviar correo lo dejamos también en blanco.

Aquí configuramos la dirección y el puerto del servidor a través del que enviaremos los correos, en este caso es gmail pero podríamos configurar otro.

Decimos No a ocultar la dirección de los correos salientes.


Seleccionamos No al límite de consultas DNS

Seleccionamos mbox como formato de almacenamiento de correo local.
A continuación se reiniciará el MTA...


El siguiente paso es editar con nuestro editor preferido el fichero que contendrá los datos relacionados con las credenciales de la cuenta con la que enviaremos los correos a través del servidor de gmail. Dicho fichero es /etc/exim4/passwd.client.
#nano /etc/exim4/passwd.client

Se muestra un ejemplo del contenido del fichero /etc/exim4/passwd.client donde tendremos que añadir las líneas que están en negrita

# password file used when the local exim is authenticating to a remote
# host as a client.
#
# see exim4_passwd_client(5) for more documentation
#
# Example:
### target.mail.server.example:login:password
gmail-smtp.l.google.com:info.ejemplo@gmail.com:Passcuentainfo.ejemplo
*.google.com:info.ejemplo@gmail.com:Passcuentainfo.ejemplo
smtp.gmail.com:info.ejemplo@gmail.com:Passcuentainfo.ejemplo

Hasta aquí el fichero de ejemplo

Reiniciamos servicio de exim4

#/etc/init.d/exim4 restart

Ejemplo de uso

Con independencia de la solución que adoptemos, en nuestros scripts podemos mandar correos mediante el comando mail.
Un ejemplo sencillo sería:
#echo "prueba correo desde exim4"|mail -s "Test desde Exim4" correo.destino@dominio.com
Con -s Especificamos un asunto y correo.destino@dominio.com es la dirección a la que queramos mandar el correo.
El comando mail tiene un mayor número de parámetros, podremos encontrar información al respecto a través de man o en la Red.

Como en cada entrada, sólo pretendo hacer referencia a lo más importante y funcional, e intentar ser un buen punto de partida en los diferentes temas tratados. De estas cuestiones hay mucho escrito, donde podremos indagar y encontrar las soluciones que mejor se adapten a nuestras necesidades.
Espero que os haya resultado al menos útil.
Me gustaría completar y añadir valor a mi blog con tus comentarios, experiencias, etc. ¿Me ayudas?
Nos leemos en la próxima entrada.
¿De qué será? Tengo algo en la cabeza pero no lo tengo decidido.
Saludos.

Fuentes



Radar COVID

Tras largo tiempo sin publicar una entrada en el Blog, me he animado a escribir acerca de una App que podría llegar a ser muy útil en el con...