Wednesday, July 16, 2008

script python pour extraire des champs d'un fichier mbox

#! /usr/bin/env python
# -*- coding: utf-8 -*-

import mailbox, rfc822,email
import sys, os, string, re

fout = file('mailbox_tag','w')

mb = mailbox.mbox('test_mailbox')

for message in mb:
subject = message['subject']
AU = message.get_from()
TI = message['subject']
DT = message.__getitem__('date')
DSt = message.__getitem__('To')
DSc = message.__getitem__('Cc')
PJ = message.__getitem__('filename')
#contenu dans certains cas plusieurs messages
# la PJ est contenue dans le second message
if message.is_multipart():

listeCT = message.get_payload()
#print 'from :'+message.get_from()


#le titre de la PJ se trouve dans le second message
PJ = str(listeCT[1].get('Content-Disposition'))
#print PJ
nameFile = PJ[PJ.rfind('filename=')+10:len(PJ)-1]


#encoding du sous-message
contentType = str(listeCT[0].get('Content-Type'))
encoding = contentType[contentType.rfind('charset')+8:len(str(listeCT[0].get('Content-Type')))]

#print 'PJ type : '+PJ.__class__.__name__

CT = str(listeCT[0])


else:
contentType = message.get('Content-Type')
encoding = contentType[contentType.rfind('charset')+8:len(str(contentType))]
#print encoding
CT = message.get_payload()
## contentType = str(CT.get('Content-Type'))
## print contentType

print TI
#problème encoding

if encoding =='ISO-8859-1':
TI=TI.encode('ISO-8859-1').decode('UTF-8')
print 'encoding iso :'+ TI
else:pass

#supprimer les retour chariot du contenu




NewCT = CT.replace('\n','')






## print message.get_param('charset')
## print message.get_content_type()
## print '\n'


#écrire le fichier

fout.write('AU ' + AU+'\n')
fout.write('TI '+ TI +'\n')
fout.write('DT '+ DT+'\n')

fout.write('DS '+ str(DSt) +'\n '+str(DSc))
fout.write('\n')
fout.write('CT '+ str(NewCT) + '\n')
fout.write('PJ '+ str(nameFile) + '\n \n \n')

fout.write('\n \n')

#messageestdetype mboxMessage et pas email.message