[script] extraire From, Subject et message d'un mail.

Autres projets et contributions
Répondre
Avatar de l’utilisateur
cassyb
Chu Ko Nu
Messages : 310
Inscription : jeu. 04 janv. 2007, 09:07

[script] extraire From, Subject et message d'un mail.

Message par cassyb » mar. 11 mars 2008, 18:24

salut,

J'aimerais bien récupérer le From:, Subject: et le message d'un fichier de mail
genre:
From - Tue Mar 11 17:57:28 2008
...
From: "NOM Prenom" <son_adresse@webmail.fr>
...
Subject: Salut!
Content-Type: text/html; charset=iso-8859-1; format=flowed
X-OriginalArrivalTime: 08 Jul 2007 19:51:53.0137 (UTC) FILETIME=[6E7FBA10:01C7C199]

ok ce message n'est pas en html

...
From - Tue Mar 11 17:58:04 2007

Ce que je n'arrive pas:
1.
récupérer NOM-prenom@mail.fr dans:
From: NOM Prenom <NOM-prenom@mail.fr>
2.
Détecter la fin du header pour récupérer le corp du message.

vous pouvez me dire comment faire?
merci.

Avatar de l’utilisateur
vincentxavier
Elfe
Messages : 778
Inscription : ven. 11 août 2006, 18:17
Localisation : Epinay sur Seine (93)
Contact :

Message par vincentxavier » mar. 11 mars 2008, 18:34

Code : Tout sélectionner

sed -r -e 's/<(.*@.*)>/\1/
Warranty

THIS ADVICE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.

En clair, je ne pourrais être tenu responsable des dégats causés par l'utilisation de mes conseils

Image

Avatar de l’utilisateur
cassyb
Chu Ko Nu
Messages : 310
Inscription : jeu. 04 janv. 2007, 09:07

Message par cassyb » mar. 11 mars 2008, 20:06

ok mais j'aimerais avoir un resultat:
adresse email
sujet
message

actuellement je fais comme ça:
grep -e From: -e Subject: -e \n\n fichier_mails
( \n\n représentant la fin des headers)

je peux récupérer l'adresse email en faisant un pipe:
| grep -o "[[:alnum:]]*@[[:alnum:]]*.[[:alnum:]]*"

Le problème c'est que des fois j'ai des:
zCqSnilhUS1U8X3cMU4qKebzGCNvAF/zUcTqxDBWsAR7u+72tyPDhaVFoDwqK8CCDwCnBOmnnwPW
0ZlmlNJ4IgBoETEOLlfYlu4FegjVUhRKMPNq1BAAbyrUn4hinn1azncyMdRLGijGRUVFKEeVaevn
1AAFfnnPkctjNBQEf9ld97U3Fs2HJ7lrtsQ0CRRUsmM3CtPichHHrmlgxVdja2nlNTJQtLZKqCLx
que je n'arrive pas à filtrer avec
grep -v base64
(cf: Content-transfer-encoding)

y'aurait pas un paquet qui permettrait de récupérer directement ces champs?
Sur le net, ils parlent mimedump mais pas moyen de trouver un exemple.

Avatar de l’utilisateur
Tebo
Chu Ko Nu
Messages : 368
Inscription : sam. 17 mars 2007, 23:24

Message par Tebo » mar. 11 mars 2008, 20:46

Code : Tout sélectionner

alias fetchmail='echo "" > /home/jul/mail/.procmail.log; fetchmail; tail -100 $HOME/mail/.procmail.log |grep Subject'
bon bon :arrow: []

Avatar de l’utilisateur
tuxce
Maître du Kyudo
Messages : 6677
Inscription : mer. 12 sept. 2007, 16:03
Contact :

Message par tuxce » mar. 11 mars 2008, 20:55

tu peux peut etre utiliser procmail

Avatar de l’utilisateur
cassyb
Chu Ko Nu
Messages : 310
Inscription : jeu. 04 janv. 2007, 09:07

Message par cassyb » mar. 11 mars 2008, 23:48

@Tebo: ??.!§&"???
@tuxce:
Je ne vois pas avec procmail comment je pourrais faire ce que je veux faire.
Je ne cherche pas à filtrer des mails je veux juste récupérer certains champs des mails à partir d'un fichier à donner en paramètre.

Avatar de l’utilisateur
tuxce
Maître du Kyudo
Messages : 6677
Inscription : mer. 12 sept. 2007, 16:03
Contact :

Message par tuxce » mer. 12 mars 2008, 01:45

en fait, c'est avec le programme qui vient avec procmail: formail
par exemple avec un script de ce genre:

Code : Tout sélectionner

#!/bin/sh
cat > /tmp/$$
mail_de=$(cat /tmp/$$ | formail -x "From:" )
mail_sujet=$(cat /tmp/$$ | formail -x Subject )
# Le corps du sujet (à mettre dans un fichier tmp?):
cat /tmp/$$ | formail -I "" 
rm /tmp/$$
# traitement ...
qui s'appellerait par exemple mail_extract.sh, tu lancerais la commande suivante:

Code : Tout sélectionner

cat mbox | formail -s ./mail_extract.sh
pour le corps du message et l'entete au complet, tu as des exemples avec sed dans le man de formail

Avatar de l’utilisateur
cassyb
Chu Ko Nu
Messages : 310
Inscription : jeu. 04 janv. 2007, 09:07

Message par cassyb » mer. 12 mars 2008, 09:36

merci tuxce.
Ce qui m'interresserait serait de pouvoir ignorer les pièces jointes

un

Code : Tout sélectionner

cat /tmp/$$ | formail -I "" -I Content-Transfer-Encoding: -I Content-Disposition
ne m'enlève même pas Content-Transfer-Encoding, Content-Disposition

Mais je suis pas sûre que même s'il arrivait à me les enlever il m'enlevera aussi les
zCqSnilhUS1U8X3cMU4qKebzGCNvAF/zUcTqxDBWsAR7u+72tyPDhaVFoDwqK8CCDwCnBOmnnwPW
0ZlmlNJ4IgBoETEOLlfYlu4FegjVUhRKMPNq1BAAbyrUn4hinn1azncyMdRLGijGRUVFKEeVaevn
1AAFfnnPkctjNBQEf9ld97U3Fs2HJ7lrtsQ0CRRUsmM3CtPichHHrmlgxVdja2nlNTJQtLZKqCLx...
une idée?

Avatar de l’utilisateur
cassyb
Chu Ko Nu
Messages : 310
Inscription : jeu. 04 janv. 2007, 09:07

Message par cassyb » mer. 12 mars 2008, 10:21

sinon j'ai trouvé cette classe en php qui marche nikel.

Avatar de l’utilisateur
tuxce
Maître du Kyudo
Messages : 6677
Inscription : mer. 12 sept. 2007, 16:03
Contact :

Message par tuxce » mer. 12 mars 2008, 10:28

sinon, tu avais:

Code : Tout sélectionner

sed -e '/Content-Disposition: attachment;/ q'
qui arrete dès qu'il trouve la phrase

Répondre