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
 

Répondre à