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