[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: