#!/bin/bash
if [ $# -eq 1 ]; then
echo "
..::BuSiNdRe MaIl ScRiPt (bms) 17/03/2006::..
Modo de Uso: Arrancar el scrip (/usr/bin/bms, ./bms, sh bms,...)
[1] Enviar un mail a una cuenta, pudiendo adjuntar archivos si queremos
[2] Manda un Archivo o Directorio dividido en cachos a cualquier cuenta
de correo como adjuntos de mails, usando el multivolumen de la
aplicaci贸n tar. (Cada mail ocupa unos 5 MB).
[3] Al bajar los adjuntos de los correos de la opcion [2] a un directorio,
la opci贸n [3] los transforma en el archivo 贸 Directorio original.
El backup se creara en la misma carpeta donde estaban los adjuntos.
Dependencias: bash, tar, bzip2, mutt (Configurado (~/.muttrc))
Ejemplo:
set folder=~/Mail
set alias_file=.alias
set postponed=.postponed
set record=MensajesEnviados
set signature=.signature
my_hdr From: Nombre Apellido <Nombre@dominio.com>
source =.alias
NOTA: Si no tenemos la opci贸n de 'From' mutt dara problemas.
NOTA: Bajo sistemas BSD la primera linea deber铆a ser: #!/usr/compat/linux/bin/bash
-------------------------------------------------------------------------
Agradecimiento: David Grajal (dgrabla@ribera.tel.uva.es) por su idea del multivolumen
Autor: Busindre WwW.BuSiNdRe.CoM <busilezas [@] gmail.com>
-------------------------------------------------------------------------
";
else
echo " ********************* BuSiNdRe MaIl ScRiPt ********************";
echo " * *"
echo " * [1] Enviar Mail simple (Con adjunto optativo) *";
echo " * [2] Backup de un Archivo/Directorio a un correo electronico *";
echo " * [3] Indicarle directorio para Recuperar Backup *";
echo " * *";
echo " ***************************************************************";
echo "";
read -p "Opci贸n: " opcion;
case $opcion in
1)
read -p "Direcci贸n de Correo Electr贸nico: " correo;
read -p "Asunto: " palabra1 palabra2 palabra3 palabra4 palabra5 palabra6 palabra7 palabra8 palabra9 palabra10 palabra11;
if [ -n "$palabra11" ];then
echo "ERROR: Maximo 10 palabras!";
exit 0;
fi
asunto="$palabra1 $palabra2 $palabra3 $palabra4 $palabra5 $palabra6 $palabra7 $palabra8 $palabra9 $palabra10";
read -p "Deseas adjuntar algun archivo? S/N: " ad;
case $ad in
"S"|"s")#Mail con adjunto, comprobacion de la existencia del adjunto
read -p "Adjuntar Archivo: " adjunto;
if [ -z $adjunto ];then
echo "ERROR: Debe especificar un Archivo";
exit 0;
else
if [ -d $adjunto -o -e $adjunto ];then
ls -lt $adjunto | grep -i "total 0";
var=$?;
echo $var;
if test $var -eq 0 ; then
echo "ERROR: El directorio est谩 vacio, no contiene datos!";
exit 0;
else
echo "[ OK ]";
fi
else
echo "[ ERROR ]";
echo "No se encontro $adjunto en el sistema.";
exit 0;
fi
fi
echo "";
echo "....................:: ReDaCtAr MeNsAjE ::.......(CTRL + D Finalizar Escritura)";
cat> mtmp;
echo "Procesando Adjuntos ...";
mutt -s "$asunto" $correo -a $adjunto <mtmp;
rm mtmp;
echo "...... Enviado! :-)";
;;
"N"|"n")#mail sin adjunto
echo "";
echo "....................:: ReDaCtAr MeNsAjE ::.......(CTRL + D Finalizar Escritura)";
cat> mtmp;
mutt -s "$asunto" $correo <mtmp;
rm mtmp;
echo "...... Enviado! :-)";
;;
esac
;;
2)#Opcion 2
read -p "Direcci贸n de Correo Electr贸nico: " EMAIL ;
read -p "Asunto: " CADENA_ID;
read -p "Archivo / Directorio del BACKUP: " ARCHIVOS;
if [ -z $ARCHIVOS ];then
echo "ERROR: Debe especificar un Archivo/Directorio";
exit 0;
else
if [ -d $ARCHIVOS -o -e $ARCHIVOS ];then
ls -lt $ARCHIVOS | grep -i "total 0";
var=$?;
#echo $var;
if test $var -eq 0 ; then
echo "ERROR: El directorio est谩 vacio, no contiene datos!";
exit 0;
else
echo "... OK";
fi
else
echo "... ERROR";
echo "No se encontro $ARCHIVOS en el sistema";
exit 0;
fi
fi
# ---------------------- Fin de las comprobaciones ------------------------
FECHA=`date '+%Y.%m.%d'`;
URL_TMP="/tmp/Mail_$FECHA/";
FILES="backup";
if ! [[ -d $URL_TMP ]] ; then
echo "Creando directorio $URL_TMP";
mkdir $URL_TMP;
fi
# Metodo moderno: Con tar multivolumen
echo "Comprimiendo ficheros (bzip2)...";
tar -cSjf $URL_TMP/$FILES.tar.bz2 $ARCHIVOS
echo "Tareando/Partiendo ficheros...";
tar -cSM -L 4900 -f $URL_TMP/$FILES-1.tar -f $URL_TMP/$FILES-2.tar -f $URL_TMP/$FILES-3.tar -f $URL_TMP/$FILES-4.tar -f $URL_TMP/$FILES-5.tar -f $URL_TMP/$FILES-6.tar -f $URL_TMP/$FILES-7.tar -f $URL_TMP/$FILES-8.tar -f $URL_TMP/$FILES-9.tar -f $URL_TMP/$FILES-10.tar -f $URL_TMP/$FILES-11.tar -f $URL_TMP/$FILES-12.tar -f $URL_TMP/$FILES-13.tar -f $URL_TMP/$FILES-14.tar -f $URL_TMP/$FILES-15.tar -f $URL_TMP/$FILES-16.tar -f $URL_TMP/$FILES-17.tar $URL_TMP/$FILES.tar.bz2
echo "Recomprimiendo nuevos ficheros (bzip2)..."
bzip2 --best $URL_TMP/$FILES-*
# El /dev/null es pq mutt espera siempre algo par aponer en el body
# ver http://www.shelldorado.com/articles/mailattachments.html
NUM="0";
for file in $URL_TMP/$FILES-*
do
let NUM++;
echo "Mandando email $NUM a $EMAIL";
mutt -s "$CADENA_ID $FECHA $ARCHIVOS $NUM" $EMAIL -a $URL_TMP/$FILES-$NUM.tar.bz2 </dev/null
done
#echo "Borrando directorio $URL_TMP";
rm -R $URL_TMP;
echo "Done!";
;;
3)#Opcion 3 (Recuperar archivo/directorio original a partir de los adjuntos)
read -p "Directorio: " adjunto;
if [ -z $adjunto ];then
echo "ERROR: Debe especificar el Directorio!";
exit 0;
else
if [ -d $adjunto -o -e $adjunto ];then
ls $adjunto | grep -i "tar.bz2";
var=$?;
#echo $var;
if test $var -eq 0 ; then
echo "OK!";
#bunzip2 *.tar.bz2;
NUMERO=`find $adjunto -type f -maxdepth 1 | wc -l`;
echo "#!/bin/bash"> temp;
echo "bunzip2 $adjunto/*.tar.bz2">> temp;
echo "tar -xvMf $adjunto/backup-1.tar \\">> temp;
if [ $NUMERO -gt 1 ];then
i=1;
until [ $i -eq $NUMERO ]
do
i=`expr $i + 1`;
echo "-f $adjunto/backup-$i.tar \\">> temp;
done
echo ";">> temp;
chmod u+x temp;
sh temp;
sleep 2;
rm temp;
mv tmp $adjunto/
cd $adjunto
drt=`ls tmp/`;
tar -xjvf tmp/$drt/backup.tar.bz2;
echo "Realizado con exito! :-)";
rm -r tmp;#Borramos basura
fi
else
echo "... Error";
exit 0;
fi
else
echo "ERROR: No se encontr贸 $adjunto en el sistema";
exit 0;
fi
fi
;;
esac
fi