OVH Cloud OVH Cloud

Extraire les entêtes des mails

5 réponses
Avatar
J.Pierre Pourrez
Bonjour,

J'utilise Mutt sous Sarge.

Je cherche à extraire les entêtes des mails stockés dans un fichier.
J'ai essayé avec grep comme suit:

egrep '^(From|To|Date|Subject|Lines):' ~/Mail/testgrep | less

Mais le champ Subject: me pose 2 problèmes:

Subject: Recrutement: Offre ANPE =?iso-8859-1?Q?n?=

Les lettres accentuées ne sont remises sous leur forme d'origine et le
valeur de Subject se trouve sur 2 lignes.

Quelqu'un a-t-il une solution à mon problème ?

D'avance merci
Jean-Pierre

5 réponses

Avatar
bozo_le_clown
"J.Pierre Pourrez" wrote:

Je cherche à extraire les entêtes des mails stockés dans un fichier.
J'ai essayé avec grep comme suit:

egrep '^(From|To|Date|Subject|Lines):' ~/Mail/testgrep | less

Mais le champ Subject: me pose 2 problèmes:

Subject: Recrutement: Offre ANPE =?iso-8859-1?Q?n? >
Les lettres accentuées ne sont remises sous leur forme d'origine et le
valeur de Subject se trouve sur 2 lignes.

Quelqu'un a-t-il une solution à mon problème ?


Perl devrait te permettre de faire ce que tu veux, en extrayant tout
jusqu'au prochain champ, puis en convertissant en ASCII à l'aide de
Mime::decode (ou similaire).

Il y a peut-être déjà un outil proche de procmail qui fait déjà ça...

bye

JKr

--
SPITWADS ARE NOT FREE SPEECH.
SPITWADS ARE NOT FREE SPEECH.
SPITWADS ARE NOT FREE SPEECH.
-+- Bart Simpson on chalkboard, episode #72

Avatar
J.Pierre Pourrez
Le Tue, 26 Jul 2005 18:03:16 +0200, Julien K. a écrit :

"J.Pierre Pourrez" wrote:

Je cherche à extraire les entêtes des mails stockés dans un fichier.
J'ai essayé avec grep comme suit:

egrep '^(From|To|Date|Subject|Lines):' ~/Mail/testgrep | less

Mais le champ Subject: me pose 2 problèmes:

Subject: Recrutement: Offre ANPE =?iso-8859-1?Q?n? >>
Les lettres accentuées ne sont remises sous leur forme d'origine et le
valeur de Subject se trouve sur 2 lignes.

Quelqu'un a-t-il une solution à mon problème ?


Perl devrait te permettre de faire ce que tu veux, en extrayant tout
jusqu'au prochain champ, puis en convertissant en ASCII à l'aide de
Mime::decode (ou similaire).

Il y a peut-être déjà un outil proche de procmail qui fait déjà ça...

bye

JKr


J'ai bien été faire un tour sur www.cpan.org où j'ai récupéré hmail.
Il y a aussi un paquet Debian qui s'appelle grepmail.
Mais avec formail, ils semblent fâchés avec les lettres accentuées.
Et je suis un peu fâché avec les pointeurs et tableaux en Perl.

D'où, j'ai écrit quelques lignes en Python qui font le job:
------8<-----8<-----8<-----8<-----8<-----8<-----8<-----8<-----8<---
#!/usr/bin/env python

import mailbox
import email, email.Errors
import email.Header

def extract(fp):
try:
return email.message_from_file(fp)
except:
return ''

file1 = open('/home/jpierre/Mail/testgrep', 'rb')
mb = mailbox.PortableUnixMailbox(file1, extract)

for message in mb:
for fieldname in ('Subject', 'From', 'To', 'Date'):
buf = email.Header.decode_header(message.get(fieldname, ''))
value = []
for str1, charset in buf:
value.append(str1)
print '%s: %s' % (fieldname, ''.join(value))
print "="*30

file1.close()
------8<-----8<-----8<-----8<-----8<-----8<-----8<-----8<-----8<---

Si quelqu'un a une meilleure idée, je suis toujours preneur.
Jean-Pierre


Avatar
Jérémy JUST
On Tue, 26 Jul 2005 22:14:29 +0200
"J.Pierre Pourrez" wrote:

Si quelqu'un a une meilleure idée, je suis toujours preneur.


Très lourd, mais rapide à écrire:

$ < my_mbox formail -s formail -cz -X 'Subject' -X 'From: ' -X 'To:' -X 'Date:' -s perl -MEncodeÞcode -ne 'END{print "n"} print decode "MIME-Header", $_'


--
Jérémy JUST

Avatar
Jérémy JUST
On Tue, 26 Jul 2005 22:14:29 +0200
"J.Pierre Pourrez" wrote:

Si quelqu'un a une meilleure idée, je suis toujours preneur.


Très lourd, mais rapide à écrire:

$ < my_mbox formail -s formail -cz -X 'Subject:' -X 'From:' -X 'To:' -X 'Date:' -s perl -MEncodeÞcode -ne 'END{print "n"} print decode "MIME-Header", $_'


--
Jérémy JUST

Avatar
Jérémy JUST
On Wed, 27 Jul 2005 02:17:34 +0200
Jérémy JUST wrote:

$ < my_mbox formail -s formail -cz -X 'Subject:' -X 'From:' -X 'To:' -X
'Date:' -s perl -MEncodeÞcode -ne 'END{print "n"} print decode
"MIME-Header", $_'


À la relecture, je me suis inutilement compliqué la vie. Un seul appel
à formail suffit:

$ < my_mbox formail -cz -X 'Subject:' -X 'From:' -X 'To:' -X 'Date:' -s perl -MEncodeÞcode -ne 'END{print "n"} print decode "MIME-Header", $_'


--
Jérémy JUST