jueves, 13 de diciembre de 2012

Enviar correo desde bash de linux usando telnet y servidor smtp zimbra

Estos días necesite enviar de forma diaria el espacio en disco que tenia cada servidor a un correo de monitoreo, así que como era un linux el que debía enviar necesitaba programarlo de forma automática y desde consola (bash) por lo cual me puse a investigar como hacerlo, en este caso el viejo comando mail que contaba RedHat me era insuficiente, o al menos no conseguí que el correo saliera de la red y solamente lo hacia con cuentas locales en la maquina (Dentro del mismo server con sus propios usuarios), supongo que debo configurar el sendmail del propio servidor, lo cual no quise hacer me pareció innecesario ya que ya contaba con un servidor de correo montado en zimbra, así que lo mas razonable era intentar enviar haciendo uso de una cuenta en este server, por lo cual me tope con este problema de como hacerlo en consola, por lo cual ya antes había probado haciéndolo con telnet al puerto 25 y me pareció lo mas sencillo, así que hice un script sencillo que los describo aquí:



(archivo mail2.sh)

#!/bin/bash

#Se verifica que se ingresen todos los parametros necesarios en este caso 8
if [ $# -ne 8 ]
then
echo "Campos: $0 FromAdress ToAdress Domain MailServer MailTextFile AuthEmail AuthPass Subject"
exit 1
fi

from=$1
to=$2
subject=$8 
fechamas=$(date)
subject="$subject $fechamas"
domain=$3
mailserver=$4
mailtext=$5
authemail=`echo $6|openssl enc -base64|awk 'sub("..$", "")'`
authpass=`echo $7|openssl enc -base64|awk 'sub("..$", "")'`

if [ ! -f $mailtext ]
then
echo "No se puedo encontrar $mailtext ..."
exit 1
fi

exec 9<>/dev/tcp/$mailserver/25
echo "1"
echo "HELO $domain" >&9
read -r temp <&9
echo "$temp"
echo "auth login" >&9
read -r temp <&9
echo "$authemail" >&9
read -r temp <&9
echo "$authpass" >&9
read -r temp <&9
echo "Mail From: $from" >&9
read -r temp <&9
echo "$temp"
echo "Rcpt To: $to" >&9
read -r temp <&9
echo "$temp"
echo "Data" >&9
read -r temp <&9
echo "$temp"
echo "Subject: $subject" >&9
read -r temp <&9
echo "$temp"
cat $mailtext >&9
echo "." >&9
read -r temp <&9
echo "$temp"
echo "quit" >&9
read -r temp <&9
echo "$temp"
9>&-
9<&-
echo "Se envio el correo. Verifique si aparecieron algunos errores"
exit 0


Ahora para llamar a este script nada mas ejecuto la siguiente linea




#sh mail2.sh registrolog@midominio.pe registrolog@midominio.pe midominio.pe ip_o_dominio_de_server_smtp archivo_cuerpo_correo.txt registrolog@midominio.pe "contrasenha_de_la_cuenta_origen" "Asunto del correo"




En este caso debo identificar bien la cuenta de correo origen y destino, en mi caso estoy enviando a la misma cuenta por lo cual mi origen y destino es el mismo. Ademas depende del servidor de correo si permite enviar sin contraseña  yo probé colocando la contraseña en blanco y me acepto nada mas porque el origen y destino era el mismo , caso contrario no hace el envió. Pero bueno eso depende de como hayan configurado su Server smtp.




Este script también lo probé en Ubuntu y no hubo problemas de envio.




NOTA.- Verifica bien la salida del script una vez que lo lanzas porque hay algunos mensajes de alerta o error pero eso no evita que envie el mail.

No hay comentarios.:

Publicar un comentario