PDA

Ver la versión completa : cogecorreo (shell script)



j8k6f4v9j
05-08-2009, 14:29
Aquí os dejo este script, a mí me sirve para recoger automáticamente el correo de todas mis cuentas y notificarme de su llegada. Con la notificación, me abre directamente mutt en una terminal.

El script lo meto en un crontab del usuario y también creo un logrotate para los logs que genera. Si a alguien le interesa le paso el resto.

El script en cuestión es éste:


#!/bin/sh

# With this configuration, it is necessary to create a
# directory /var/run/cogecorreo.$USER with the current user
# as owner, as well as a /var/log/cogecorreo.$USER.log one.
#
# i.e. (as root):
# mkdir /var/run/cogecorreo.$USER
# touch /var/log/cogecorreo.$USER.log
# chown $USER /var/run/cogecorreo.$USER /var/log/cogecorreo.$USER.log
#

logfile="/var/log/cogecorreo.$USER.log"
pidfile="/var/run/cogecorreo.$USER/cogecorreo.pid"
maildir="/home/$USER/Maildir"
mboxes="$maildir/mailboxes"
if [[ $1 == '-d' ]]; then
debug=1
fi

function marca {
date +%d-%m-%Y--%H:%M:%S
}

function sep {
echo '-------------------------------------------------------------------------------'
}

function old_open {
test -f $pidfile || return 1
}

function notify {
echo $$ > $pidfile
if [[ `find $mboxes/ -type d -name new -exec ls {} \; ; ls $maildir/new` != '' ]]; then
kdialog --display :0 --msgbox 'Hay correo nuevo' && xterm -display :0 -fb black -fa 'Andale Mono' -fg orange -fs 13 -e 'mutt -y'
fi
rm -f $pidfile
}

function main {
sep
marca

if [[ -z $debug ]]; then
mpop -n --tls-certcheck=off
fetchmail
fi

old_open || notify | tee -a $logfile
}



exec 2>&1
(($debug)) && set -x
main




Asimismo, si a alguien interesa el shell scripting puedo comentar el código, que es bantante sencillo.


Salu2

Marchi
05-08-2009, 22:32
Muy interesante el script, solo que no tengo mpop ni fetchmail, los configuro y despues cuento que tal anda.:)

Saludoss

j8k6f4v9j
06-08-2009, 00:12
Realmente sólo es necesario uno de los dos.

El esquema de la configuración de mi sistema de correo utiliza las siguientes aplicaciones:


fetchmail

Para recoger el correo desde mis cuentas de email externas
mpop

Igual que fetchmail en funciones (no es necesario)
procmail

Procesador de correo, lo distribuye a los directorios que se le indica en el archivo de configuración.
exim4

MTA o agente de transferencia de email. Es un reemplazo de sendmail con el que podemos enviar correo (entre otras muchas funcionalidades)
mutt

MUA o Agente usuario de correo. Con él podemos visualizar nuestros correos, gestionarlos (copiar, mover, enviar -usando un MTA externo, como exim4-, etc)
dovecot

Servidor de correo. Con él podemos tener un servidor de POP3, IMAP, POP3S, IMAPS


En este escenario, fetchmail recoge el correo y se lo pasa a exim4. Pero exim4 "usa" procmail para guardar el correo en los directorios especificados en la configuración. Luego, mutt, a través de parámetro -y, muestra los distintos mailboxes que se le han configurado (que son los destinos especificados en el archivo .procmailrc en este caso).

Una tarea de crontab se encarga de ejecutar cogecorreo.sh a intervalos de tiempo regulares (en mi caso, cada 5 ó 10 minutos). Al ejecutar fetchmail, el correo recogido acaba directamente en el mailbox que le corresponda. cogecorreo.sh busca en los directorios de correo nuevo de los mailboxes, y si encuentra correo nuevo, muestra el diálogo por pantalla. Al pulsar sobre 'ok', se abre mutt (con el parámetro -y), mostrando todos los mailboxes.

Es una configuración relativamente compleja, pero merece la pena, porque se puede gestionar todo el correo localmente sin tener que utilizar ninguna interfaz (sólamente mutt y el diálogo de aviso).

Salu2