Extraire les emails d’un fichier mbox

0 Flares 0 Flares ×

En essayant de récupérer les adresses emails d’un dossier particulier sur mon logiciel de messagerie Thunderbird, je me suis aperçu que ça n’était pas vraiment possible. J’ai donc fait un petit script en python pour m’extraire ces emails du fichier au format mbox.

Ce script est en version beta (comme à peu prés toutes mes contributions ;-) )pour l’instant mais semble à peu prés fonctionner.

Tout d’abord, il faut récupérer le chemin de votre fichier mbox dans Thunderbird. Il suffit de faire un clic droit, dans la liste des dossiers, sur le dossier en question, propriétés… et de copier la valeur de la zone Emplacement :

Pour récupérer les emails des expéditeurs de ma boîte Inbox :

python extractmail -f "/home/julien/.thunderbird/nqewen2a.default/Mail/Local Folders/Inbox" -w From

Pour récupérer les emails des destinataires de ma boîte d’envoie :

python extractmail -f "/home/julien/.thunderbird/nqewen2a.default/Mail/Local Folders/Sent" -w To
#!/usr/bin/python
# -*- coding: utf-8 -*-

"""
mailparser

permet de récupérer les adresses emails des champs From, To, Sender, Cc, Reply-To
d'un fichier au format mbox.
"""

__author__ = "Julien Chanséaume"
__copyright__ = "Copyright 2012, Project"
__credits__ = ["Julien Chanséaume"]
__license__ = "GPL"
__version__ = "1.0"
__maintainer__ = "Julien Chanséaume"
__email__ = "info@bibichette.com"
__status__ = "Production"

import re
import sys
import logging
import os
from optparse import OptionParser

# --------------------------------------
# Logging
LOG_FILENAME = 'mail-parser.log'
LOG_LEVEL = logging.INFO
logging.basicConfig(filename=LOG_FILENAME,level=LOG_LEVEL,)
console = logging.StreamHandler()
console.setLevel(logging.WARN)
#formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
#console.setFormatter(formatter)
logging.getLogger('').addHandler(console)

# --------------------------------------
# MAIN
def main():

usage = """usage: %prog -f file -w fields
fields: which fields separate by ,
ex.: From,To,Sender,Cc,Reply-to
"""
parser = OptionParser(usage=usage)
parser.add_option("-f", "--file", dest="file", help="", metavar="FILE"),
parser.add_option("-w", "--what", dest="fields", default="From", help="what fields", metavar="FILE"),

(options, args) = parser.parse_args()

# On parse la ligne de commande
if options.file is None and os.path.exists(options.file):
logging.error("Fichier introuvable (option -f FILE ( ou --file=FILE )")
sys.exit(0)

extract(options.file, options.fields.replace(',', '|'))

def extract(path, fields):

r = re.compile(r'^(?:%s): (.*)' % (fields,), re.I)

count = 0
lines = 0
emails = set()

for line in open(path,'r'):
lines += 1

match = r.match(line)
if (match):
emails_temp = extract_mails(match.group(1))
emails |= emails_temp

for email in list(emails):
print email

print "%s emails / %s lignes" % (len(emails), lines)

def extract_mails(content):
"""
Extract emails from fields
voir : http://tools.ietf.org/html/rfc2822#section-3.6.2
"""
emails = set()

r1 = re.compile(r'<((?:[\w.-]+)@(?:[\w.-]+))>')
r2 = re.compile(r'\b((?:[\w.-]+)@(?:[\w.-]+))\b')

clean = content.strip()
fields = clean.split(',')
for field in fields:
email = ''
field = field.strip()
match = r1.search(field)
if match:
email = match.group(1)
else:
match = r2.search(field)
if match:
email = match.group(1)

if email != '':
emails.add(email.lower())

return emails

if __name__ == "__main__":
main()

0 Flares Twitter 0 Facebook 0 Google+ 0 Buffer 0 0 Flares ×

« »

Un commentaire sur “Extraire les emails d’un fichier mbox

  1. Rétrolien : Python codeline | Pearltrees