Re: script vérification mail
Le Sun, Jan 04, 2004 à 12:49:04PM +0100, Nicolas Roudninski a écrit
> Bonjour,
> Je souhaite réaliser un petit script qui me lancerait mutt à l'arrivée
> d'un nouveau courrier dans /var/mail/utilisateur d'après certains
> critères (expéditeur, sujet...).
J'ai une bidouille qui va dans ce sens elle permet de lancer tous les 8h mutt
s'il y a de nouveaux messages dans une boîte à lettre et si une session X est
active pour le user (mescam dans mon cas) :
lancer par at -f fichier1 now
fichier1 contient :
#! /bin/sh
# tous les 8heures vérifier spam
<chemin>/jobmutt.sh spam 8
exit 0
$cat jobmutt.sh
#! /bin/sh
#set -x
# jobmutt.sh <boite à lettre> <délai de relance>
source $HOME/.bashrc
export DISPLAY=:0.0
cd $HOME
#test de la présence d'une session X (fluxbow dans mon cas)
if ps aux >/tmp/psaux$1 ; grep "mescam.*fluxbox" /tmp/psaux$1 >/dev/null
then
if compte_mail.pl $MAIL/$1 | grep -v "0 mails" >/dev/null
then
aterm +sb -T lecture_$1 -e mutt -f $MAIL/$1
fi
fi
rm -f /tmp/psaux$1
at now+$2hours -f <chemin vers scripts>/lecture_$1.sh &>/dev/null
exit 0
$cat compte_mail.pl
#!/usr/bin/perl -w
# compter le nombre mails lus et le nombre de mail total du fichier indiqué
# dans l'appelécrire le résultat sur stdout
# exécution par par exemple
# cat $MAIL/temp > /tmp/compte.mbox ; ./compte_mail.pl
use strict;
use Mail::Mbox::MessageParser;
my $file_name = $ARGV[0];
my $file_handle = new FileHandle($file_name);
my $nb_mail = 0;
my $nb_mail_non_lus = 0;
# Set up cache. (Not necessary if enable_cache is false.)
Mail::Mbox::MessageParser::SETUP_CACHE( { 'file_name' => '/tmp/cache' } );
my $folder_reader = new Mail::Mbox::MessageParser( {
'file_name' => $file_name,
'file_handle' => $file_handle,
'enable_cache' => 1,
'enable_grep' => 1, } );
# si le fichier est vide sortir
if ( $folder_reader =~ /No data on filehandle/ ) {
print "$nb_mail_non_lus mails non lus sur $nb_mail mail au total\n";
exit;
}
# Any newlines or such before the start of the first email
my $prologue = $folder_reader->prologue;
#print $prologue;
# This is the main loop. It's executed once for each email
while(!$folder_reader->end_of_file()) {
my $email = $folder_reader->read_next_email();
$nb_mail++;
my @parties = split (/\n\n/,$$email);
if ( $parties[0] !~ /Status: RO/ ) { $nb_mail_non_lus++ } ;
}
print "$nb_mail_non_lus mails non lus sur $nb_mail mail au total\n";
exit;
--
Francois Mescam
Reply to: