OVH Cloud OVH Cloud

Notification de mail dans un script

5 réponses
Avatar
JKB
Bonjour à tous,

J'ai besoin de suivre l'arrivée de mails dans un script.
J'ai googlisé sans trop de succès et je ne vois pas comment faire de façon
simple (sauf à taper dans un echo q | mail | grep ">N") ?
En fait, j'ai besoin d'être notifié de l'arrivée du mail et j'ai aussi
besoin de récupérer le message avec ses pièces jointes...

Une autre piste serait de travailler directement dans /var/spool/mail, mais
je sèche...

Merci d'avance pour toute idée...

Cordialement,

JKB

--
En plus c'est simple, je fais ce genre de trucs en g77 depuis des années :
il suffit d'écrire un wrapper en C. Et comme ça, j'ai le meilleur des deux
mondes : la rigueur quasi-monacale du Fortran, et l'exubérance pétulante du C.

5 réponses

Avatar
Basile Starynkevitch [news]
On 2005-09-29, JKB wrote:
Bonjour à tous,

J'ai besoin de suivre l'arrivée de mails dans un script.
J'ai googlisé sans trop de succès et je ne vois pas comment faire de façon
simple (sauf à taper dans un echo q | mail | grep ">N") ?
En fait, j'ai besoin d'être notifié de l'arrivée du mail et j'ai aussi
besoin de récupérer le message avec ses pièces jointes...


Si vous voulez qu'un programme traite tous les méls rentrants, il
suffit de mettre un pipe dans votre forward, par exemple
## fichier .forward
|maildrop
## fin de ~/.forward

Ensuite vous pouvez utiliser un filtre de mail (ou plusieurs à la
suite) comme maildrop par exemple, qui peuvent chercher des mails sur
certains critères

Enfin, il existe de commande (mimemail si j'ai bonne mémoire) pour
décortiquer un message MIME.




--
Basile STARYNKEVITCH http://starynkevitch.net/Basile/
email: basile(at)starynkevitch(dot)net
8, rue de la Faïencerie, 92340 Bourg La Reine, France

Avatar
Emmanuel Florac
Le Thu, 29 Sep 2005 19:14:33 +0000, JKB a écrit :

Merci d'avance pour toute idée...


Pourquoi ne pas utiliser procmail? Tu peux très facilement piper ce que
tu veux dans un script, avec tout un tas de règles de filtrage.

--
Les défauts n'apparaissent qu'après que le programme a passé (avec
succès) la phase d'intégration.
Loi de Klipstein.

Avatar
JKB
Le 29-09-2005, à propos de
Re: Notification de mail dans un script,
Emmanuel Florac écrivait dans fr.comp.os.linux.configuration :
Le Thu, 29 Sep 2005 19:14:33 +0000, JKB a écrit :

Merci d'avance pour toute idée...


Pourquoi ne pas utiliser procmail? Tu peux très facilement piper ce que
tu veux dans un script, avec tout un tas de règles de filtrage.


Tiens, je n'y avais pas pensé (j'étais parti dans une usine à gaz). Je viens
de lire la doc et j'ai quelques questions... Le but est de faire passer un
mail successivement d'un utilisateur à l'autre (façon chaîne pour corriger
des articles). J'ai trouvé le moyen de faire passer un mail d'un utilisateur
à un autre (mais je sèche sur la condition de fin, mon truc se mordant la
queue). Par contre, je n'arrive pas à gérer un timeout de façon élégante.
Lorsqu'un utilisateur ne renvoie pas son papier au bout d'un certain temps,
le message doit passer au suivant. En jouant avec at, j'arrive à gérer un
timeout, mais comme je n'arrive pas à tuer la tâche at en question, le
suivant peut récupérer deux messages... Une idée pour modifier mon script ?

DRESSES="






"

echo
echo "Mise à jour du système de rotation automatique des mails"
echo

# Ecriture du fichier .forward pour lancer procmail à la réception d'un mail
echo "|exec /usr/bin/procmail" > .forward
echo "# Fichier généré automatiquement, ne pas éditer" > .procmailrc
echo "# $(date)" >> .procmailrc
echo >> .procmailrc

# Génération du fichier .procmailrc
j=1
for i in ${ADRESSES}
do
j=$(($j+1))
echo -n " Traitement de l'adresse "
echo -n "$i"

ADRESSE_SUIVANTE=$(echo ${ADRESSES} | tr 'n' ' ' | cut -d ' ' -f $j)
if [ -z ${ADRESSE_SUIVANTE} ]; then
ADRESSE_SUIVANTE=$(echo ${ADRESSES} | tr 'n' ' ' | cut -d ' ' -f 1)
fi

# Règle normale : on envoie à la personne suivante

echo ":0" >> .procmailrc
echo "* ^From.*$i.*" >> .procmailrc
echo "{" >> .procmailrc
echo " :0" >> .procmailrc
echo " ! ${ADRESSE_SUIVANTE}" >> .procmailrc
echo >> .procmailrc
echo " :0 hwc:" >> .procmailrc
echo " | quelque chose avec un at" >> .procmailrc
echo "}" >> .procmailrc
echo >> .procmailrc

# Règle de timeout
echo ":0" >> .procmailrc
echo "* ^From.*aiesme.*" >> .procmailrc
echo "* ^Subject.*timeout.*" >> .procmailrc
echo "| quelque chose avec un at" >> .procmailrc
echo >> .procmailrc

echo "."
done

echo

exit 0
# vim: ts=4

Merci de votre attention,

JKB


Avatar
Emmanuel Florac
Le Fri, 30 Sep 2005 09:53:07 +0000, JKB a écrit :

mais comme je n'arrive pas
à tuer la tâche at en question, le suivant peut récupérer deux
messages...


Je ne comprends pas bien, là? Comment peut -il avoir deux fois le message?

--
Le travail est la malédiction des classes qui boivent.
O. Wilde.

Avatar
JKB
Le 30-09-2005, à propos de
Re: Notification de mail dans un script,
Emmanuel Florac écrivait dans fr.comp.os.linux.configuration :
Le Fri, 30 Sep 2005 09:53:07 +0000, JKB a écrit :

mais comme je n'arrive pas
à tuer la tâche at en question, le suivant peut récupérer deux
messages...


Je ne comprends pas bien, là? Comment peut -il avoir deux fois le message?


En écrivant la règle procmail précédente, je force l'envoi d'un mail vers
l'utilisateur suivant de la chaîne. Ce que je cherche à faire est simple. Si
l'utilisateur s'endort (ou est en vacances, ou injoignable...), il ne
renverra pas le message à la chaîne. Je souhaite donc que le message soit
adressé à l'utilisateur suivant de la chaîne. L'idée était de coupler
procmail avec at, mais je ne sais pas comment annuler le message dans la
queue d'at lorsque l'utilisateur répond... Je ne sais pas si je suis bien
clair ;-)

Cordialement,

JKB