Formater les mails

Bonjour!
Le titre n’est pas très explicite, donc je m’explique :
Je récupère mes mails via fetchmail. Ces derniers sont stockés dans le dossier ~/Maildir/new . Pour les lire, je fais un simple

Cependant, le résultat est vraiment laid :

[code]Return-path: root@lothlorien
Envelope-to: root@lothlorien
Delivery-date: Fri, 10 Sep 2010 09:55:44 +0200
Received: from root by Lothlorien with local (Exim 4.72)
(envelope-from root@lothlorien)
id 1OtySV-0005cQ-VF
for root@lothlorien; Fri, 10 Sep 2010 09:55:44 +0200
Date: Fri, 10 Sep 2010 09:55:43 +0200
Message-Id: E1OtySV-0005cQ-VF@Lothlorien
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit
Subject: =?utf-8?q?apt-listchanges=C2=A0=3A_nouveaut=C3=A9s_pour_Lothlor
To: root@lothlorien
From: root root@lothlorien

sudo (1.7.4p4-2) unstable; urgency=low

The HOME and MAIL environment variables are now reset based on the
target user’s password database entry when the env_reset sudoers optio
is enabled (which is the case in the default configuration). Users
wishing to preserve the original values should use a sudoers entry lik
Defaults env_keep += HOME
to preserve the old value of HOME and
Defaults env_keep += MAIL
to preserve the old value of MAIL.

The change in handling of HOME is known to affect programs like pbuild

– Bdale Garbee bdale@gag.com Wed, 08 Sep 2010 14:29:16 -0600
[/code]
Je voudrais arranger tout ça. Je pense bien que je peux récupérer les champs from et Subject et Date à coup de grep. Mais pour ensuite n’avoir que le message, comment puis-je faire? Existe-t-il un soft du même genre que html2text mais pour les mails?

Pourquoi n’essaies-tu pas de lire ça avec un client comme icedove en graphique ou autre chose en console ?
C’est pas dans ton cahier des charges ?

J’utilise mutt et je le trouve vraiment génial…

Justement je voudrais me passer d’un tel client. En fait, j’affiche les nouveaux messages dans dmenu, pur ceux qui connaissent. Ça me donne un accès repide au mail, lorsque je veux éviter de lancer un client exprès. Le meixu serait de pouvoir avoir juste un résumé du mail en question, et si ça me plaît je lance alors le client de messagerie (claws-mail pour moi).

Tu as un compte gmail??

Tu as donc créé un script qui affiche les nouveaux emails dans dmenu??
Ou une simple commande qui compte les nouveaux emails dans ton répertoire new (avec wc -l)??

Peux tu détailler ta façon de faire stp??

J’ai vu un script sur suckless dans ce sens mais je n’ai jamais essayé.

Mes nouveaux emails apparaissent (en nombre) dans mon conky mais je dois lancer mutt pour les lire, il est qu’un bref résumé (ou tout du moins faire apparaitre l’expéditeur et/ou le sujet) serait vraiment pratique…

Bien, je vais donc détailler. Il s’agit d’un compte à laposte (oui, j’ai changé depuis que gmail demande le numero de telephone, et surtout parce que je me sentais trop surveillé.).
Je récupère donc les mails de ce compte via fetchmail. J’ai un fichier .fetchmail/fetchmailrc :

poll imap.laposte.net protocol IMAP username "****" password "*****" keep
Ensuite, mon script est celui-ci, il s’appelle courriel :

#!/bin/sh SB="#4b555e" SF="#A6BBCF" NB="#08090a" NF="#4b555e" FN="fixed" SUM=/tmp/MAILSUMMARY N=1 if [ -e $SUM ]; then rm $SUM fi fetchmail -p IMAP imap.laposte.net --username ******* -f ~/.fetchmail/fetchmailrc #fetchmail -p IMAP imaps.etu.univ-nantes.fr --port 993 --username e072767U -f .fetchmail/fetchmailrc if [ $(ls -1 $HOME/Maildir/new/ |wc -l) -gt 0 ]; then for i in $HOME/Maildir/new/* ; do echo "*-------------------------------------------------MESSAGE-$N-------------------------------------------------*" >> $SUM cat $i >> $SUM N=$(( $N + 1 )) done LN=$(cat $SUM | wc -l) if [ $LN -gt 35 ]; then LN=35 fi cat $SUM | dmenu -fn $FN -l $LN -nb $NB -nf $NF -sb $SB -sf $SF -i -p "$(ls -1 ~/Maildir/new |wc -l) Courriel:" #mv $HOME/Maildir/new/* $HOME/Maildir/cur fi
Ce qu’il fait : il vérifie les messages de mon compte laposte.net. S’il en trouve, il y a donc des fichiers dans Maildir/new. Ces messages sont copiés dans un fichier temporaire, que j’affiche ensuite dans dmenu.
Voila en gros. Donc j’aimerais enlever les en-tetes des mails si possible.

ps : pour vérifier l’existence de nouveaux mails, j’ai un script qui lance fetchmail pareil toutes les 10 minutes, mais avec l’option -c. Je renvoie ensuite le nombre de nouveaux mails dans la barre de status de dwm (si tu es intéressé, envoie-moi un MP :wink: )

Super!!! :041

Bon, je met le script final si un jour quelqu’un en a besoin :

[code]#!/bin/sh

requiert procmail

SB="#4b555e"
SF="#A6BBCF"
NB="#08090a"
NF="#4b555e"
FN="fixed"
SUM=/tmp/MAILSUMMARY
MAILDIR=$HOME/Maildir/new/
N=1
if [ -e $SUM ]; then
rm $SUM
fi
fetchmail -p IMAP imap.laposte.net --username xavier.cartron -f ~/.fetchmail/fetchmailrc
#fetchmail -p IMAP imaps.etu.univ-nantes.fr --port 993 --username e072767U -f .fetchmail/fetchmailrc
if [ $(ls -1 $MAILDIR |wc -l) -gt 0 ]; then
for i in $MAILDIR/* ; do
echo “-------------------------------------------------MESSAGE-$N-------------------------------------------------” >> $SUM
formail -k -X From: -X Subject -X Date: < $i >> $SUM
N=$(( $N + 1 ))
echo ""
done
LN=$(cat $SUM | wc -l)
if [ $LN -gt 35 ]; then
LN=35
fi
cat $SUM | dmenu -fn $FN -l $LN -nb $NB -nf $NF -sb $SB -sf $SF -i -p "$(ls -1 ~/Maildir/new |wc -l) Courriel:"
mv $MAILDIR/* $HOME/Maildir/cur
fi
[/code]

Thuban, je viens de découvrir un peu tardivement l’existence de ce script que je trouve génial!!

Donc, je les adapté à mes besoins, fonctionnement OK quand je lance ce script via la console mais comment faire en sorte qu’il “tourne” seul??

J’ai essayé de l’intégrer au lancement de dwm mais mon cpu est à 100%…je pense que c’est à cause du fait qu’il exécute la boucle à l’infini sans marquer de temps de pose…

Faut il créer un script qui appelle celui ci??

Merci!

Tu peux ajouter une boucle au script, avec un sleep pour qu’il ne tourne pas tout le temps. Cependant, il risque d’éxécuter dmenu à chaque fois, ça ne t’embête pas trop??
Bon, voilà le script modifié, à adapter selon ton adresse mail et autres :slightly_smiling:

[code]#!/bin/sh

requiert procmail

SB="#B0BCC7"
SF="#08090A"
NB="#000000"
NF="#576571"
FN="--fixed-medium-r-semicondensed--13------iso10646-"
SUM=/tmp/MAILSUMMARY
MAILDIR=$HOME/Maildir/new/
N=1
#-----------------------------------------------------------------#

ajout d’une boucle pour M3t4linux

TIME=600 # Vérification toutes les 10 minutes
while true; do
if [ -e $SUM ]; then
rm $SUM
fi
fetchmail -p IMAP imaps.etu.univ-nantes.fr --port 993 --username e072767U -f .fetchmail/fetchmailrc
if [ $(ls -1 $MAILDIR |wc -l) -gt 0 ]; then # Si on a de nouveaux mails, on les affiche
for i in $MAILDIR/* ; do
echo “-------------------------------------------------MESSAGE-$N-------------------------------------------------” >> $SUM
formail -k -X From: -X Subject -X Date: < $i >> $SUM
N=$(( $N + 1 ))
echo ""
done
LN=$(cat $SUM | wc -l) # on évite d’avoir un dmenu trop grand.
if [ $LN -gt 35 ]; then
LN=35
fi
cat $SUM | dmenu -fn $FN -l $LN -nb $NB -nf $NF -sb $SB -sf $SF -i -p "$(ls -1 ~/Maildir/new |wc -l) Courriel:"
mv $HOME/Maildir/new/* $HOME/Maildir/cur
fi
sleep $TIME
done

exit 0
[/code]

Bon, c’est génial!!

Penses tu qu’il soit possible d’ouvrir son client de messagerie lorsque l’on tape sur entrée dans la notification affiché dans dmenu??

Bien sûr, tu récupères le résultat de dmenu dans une variable. Si la variable n’est pas vide, alors tu lance ton client de messagerie :wink: Tu veux que je le mettre? :slightly_smiling:

Bein oui, fais toi plaisir :023

tu as appris le scriptin où exactement?? Par rapport à tes études??

Salut,
Ce topic m’en rappelle un de support debian( d’il y a déjà quelque temps … ), ce script devrait satisfaire "le cahier des charges"
J’aurais bien voulu ouvrir mutt direct sur le message selectionné dans dmenu mais je n’ai pas trouvé l’option de mutt permettant de faire ça, si quelqu’un sait, qu’il partage !
:wink: #!/bin/sh fetchmail cd $HOME/Maildir/new mails=$(ls -1 |wc -l) if [ "$mails" -eq 0 ] ; then exit 0 ; else readmail=$({ for i in * do echo "$(grep "Subject: " $i |cut -c 10-)" \| "$(grep "From: " $i |cut -c 7-)" done; } |dmenu -l $mails -p "$mails nouveau(x) message(s)") if [ -z "$readmail" ] ;then exit 0 ;else $TERM -e mutt && exit 0 fi fi

Eh bien eol a été le plus rapide, et donne un script plus propre que le miens! Non, rien à voir avec mes études (Physique-chimie) j’ai “appris” en bidouillant, et en me faisant taper sur les doigts par Misterfreeze. Mes scripts sont de mauvaise qualité, il faut y faire attention :blush: .
Ceci dit, je me met au python doucement, qui sera plus adapté qu’une série de commande mal utilisées dans un script.
Allez, voila pour toi :wink: :

[code]#!/bin/sh

requiert procmail

SB="#B0BCC7"
SF="#08090A"
NB="#000000"
NF="#576571"
FN="--fixed-medium-r-semicondensed--13------iso10646-"
SUM=/tmp/MAILSUMMARY # Fichier contenant un résumé des mails
MAILDIR=$HOME/Maildir/new/ # Fichier où les mails sont enregistrés
N=1 # Variable d’incrémentation
MAILREADER=“urxvtc -e mutt -F ~/.muttrc_laposte” # lecteur de mail, ici mutt avec un fichier de config fait pour

ajout d’une boucle pour M3t4linux

TIME=600 # Vérification toutes les 10 minutes
##############################################################
while true; do
if [ -e $SUM ]; then
rm $SUM
fi

torify fetchmail -t 10 -p IMAP imap.laposte.net --username xavier.cartron -f .fetchmail/fetchmailrc
NBMAIL=$(ls -1 $MAILDIR |wc -l)

if [ $NBMAIL -gt 0 ]; then # Si on a de nouveaux mails, on les affiche
for i in $MAILDIR/* ; do
echo “---------------------------MESSAGE-$N----------------------” >> $SUM
formail -k -X From: -X Subject -X Date: < $i >> $SUM
N=$(( $N + 1 ))
echo ""
done

LN=$(cat $SUM | wc -l) 						# on évite d'avoir un dmenu trop grand.
if [ $LN -gt 35 ]; then
	LN=35
fi

REP=$(cat $SUM | sed '/^$/d' | dmenu -fn $FN -l $LN -nb $NB -nf $NF -sb $SB -sf $SF -i -p "$NBMAIL Courriel:" )
iif [ -z "$REP" ] ;then						# Si on valide sur une ligne non vide, on lance le lecteur de courrier
	exit 0 ;
else
	$MAILREADER &
fi
mv $HOME/Maildir/new/* $HOME/Maildir/cur	# On déplace les mails lus.

fi
sleep $TIME
done

exit 0
[/code]

edit : J’utilise tor ici, comme les hotspots posent parfois problème, il faudra enlever “torifiy” si tu ne veux pas l’utiliser.

GENIAL!!!

Par contre, il est obligatoire de lancer le lecteur de courrier, non??

J’ai appuyer sur Echap mais la notification revient, faut il créer une ligne vide?? Je lis dans le script que la messagerie se lance en appuyant sur une ligne non vide

[quote=“M3t4linux”]GENIAL!!!

Par contre, il est obligatoire de lancer le lecteur de courrier, non??

J’ai appuyer sur Echap mais la notification revient, faut il créer une ligne vide?? Je lis dans le script que la messagerie se lance en appuyant sur une ligne non vide[/quote]

REP=$(cat $SUM | sed '/^$/d' | dmenu -fn $FN -l $LN -nb $NB -nf $NF -sb $SB -sf $SF -i -p "$NBMAIL Courriel:" ) if [ -z "$REP" ] ;then # Si on valide sur une ligne non vide, on lance le lecteur de courrier exit 0 ;Normalement dans cette ligne, Echappe t’amène à “exit 0”, si la notification revient c’est que tu est coincé dans la boucle.

Dans cet extrait, nous somme d’accord sur le fait que if teste si la chaine $REP ets non vide, comme un message s’affiche lors de l’arrivée d’un nouvel email, cette chaine est donc toujours différente de 0

Est il possible de lancer ou non son lecteur de courriel??

avec ctrl+c dmenu se quittera. Sinon, au lieu d’avoir le test -z, tu remplace avec -n , c’est simplement le test inverse.