Un peu de tri dans mes mail

Salut à tous, je ne suis pas mort…

Ma boîte mail commençait à être bien encombrée… Pour faire un peu de ménage, j’ai commencé par utiliser les règles de filtrage de Thunderbird pour trier les mails par dossiers selon certains critères (mailing list, newsletter). Mais ma boite de réception commençait à être sacrement engorgée avec plus de 5 ans d’archives. J’ai donc décidé de me faire des dossiers d’archives pour stocker les vieux mails. Comme les règles de filtrages ne permetent pas de faire ce genre de chose, j’ai écrit un petit script python. Je le met à disposition ici. Faites en ce que vous voulez, il est sous licence GPLv3.

Le script commence par ranger les email de plus de 45 jours dans un dossiers en fonction de l’année et le trimestre. Ensuite, il copie les emails envoyés dans un sous dossier toujours par année et trimestre. Enfin, il supprime les mails de plus de 45 jours dans listes de diffusions, et ceux de plus de 10 jours pour les newsletters…

################################################################################ # mail_archiver.py - Stephane PUYBAREAU (puyb <at> puyb <dot> net) - 2008      #  # Organise an imap mail box by moving or deleting old messages.                #  # Messages in INBOX are moved in an INBOX.archive folder organised by year and #  # quarters. Messages in Sent are move in the archive folder in a sub inbox     #  # sent. Messages in INBOX.Newsletters are deleted and messages in subdirectory #  # INBOX.MailingLists ar deleted too.                                           #  #                                                                              #  # This software is provided under the terms of the GPL v3 licence.             #  # See http://www.gnu.org/licenses/gpl.html for more information                #  #                                                                              #  # This script use the feedparser module available at http://www.feedparser.org #  ################################################################################ import imaplib import feedparser from datetime import date, timedelta import sys inbox_archive = 45          # in days newsletter_delete = 10      # in days mailing_list_delete = 45    # in days server = 'localhost' login  = 'your_login' passwd = 'your_password' c = imaplib.IMAP4(server) c.login(login, passwd) inboxes = [j.split('"')[-2] for j in c.list()[1]] def make_inbox(c, inbox):     global inboxes     if inbox in inboxes:         return     inbox = inbox.split('.')     for i in range(1, len(inbox)):         if '.'.join(inbox[:i + 1]) not in inboxes:             c.create('.'.join(inbox[:i + 1]))     inboxes = [j.split('"')[-2] for j in c.list()[1]] # Archive INBOX c.select() code, (list,) = c.search(None, 'ALL') for i in list.split():     try:         code, (envelope,) = c.fetch(i, '(ENVELOPE)')         date_str = envelope[len('%s (ENVELOPE ("' % i):].split('"', 1)[0]         d = feedparser._parse_date(date_str)         if not d:             d = feedparser._parse_date(date_str.split(' ', 1)[1])         try:             d = date(*d[:3])         except:             d = date.today()         if d < date.today() - timedelta(jours):             inbox = 'INBOX.Archives.%s.Q%s' % (d.year, int((d.month - 1) / 3) + 1)             print i, d, inbox             make_inbox(c, inbox)             c.copy(i, inbox)             c.store(i, '+FLAGS.SILENT', '\\Deleted')     except:         print i, envelope, date_str, date         import traceback         traceback.print_exc()         sys.exit() c.expunge() # Archive INBOX.Sent c.select('INBOX.Sent') code, (list,) = c.search(None, 'ALL') for i in list.split():     try:         code, (envelope,) = c.fetch(i, '(ENVELOPE)')         date_str = envelope[len('%s (ENVELOPE ("' % i):].split('"', 1)[0]         d = feedparser._parse_date(date_str)         if not d:             d = feedparser._parse_date(date_str.split(' ', 1)[1])         try:             d = date(*d[:3])         except:             d = date.today()         if d < date.today() - timedelta(jours):             inbox = 'INBOX.Archives.%s.Q%s.Sent' % (d.year, int((d.month - 1) / 3) + 1)             print i, d, inbox             make_inbox(c, inbox)             c.copy(i, inbox)             c.store(i, '+FLAGS.SILENT', '\\Deleted')     except:         print i, envelope, date_str, date         import traceback         traceback.print_exc()         sys.exit() c.expunge() # Delete INBOX.Mailing Lists.* c.select('INBOX.NewsLetters') code, (list,) = c.search(None, 'ALL') for i in list.split():     try:         code, (envelope,) = c.fetch(i, '(ENVELOPE)')         date_str = envelope[len('%s (ENVELOPE ("' % i):].split('"', 1)[0]         d = feedparser._parse_date(date_str)         if not d:             d = feedparser._parse_date(date_str.split(' ', 1)[1])         try:             d = date(*d[:3])         except:             d = date.today()         if d < date.today() - timedelta(jours2):             print i, d, 'INBOX.NewsLetters'             c.store(i, '+FLAGS.SILENT', '\\Deleted')     except:         print i, envelope, date_str, date         import traceback         traceback.print_exc()         sys.exit() c.expunge() # Delete INBOX.Mailing Lists.* for inbox in [i for i in inboxes if i.startswith('INBOX.Mailing Lists.')]:     c.select(inbox)     code, (list,) = c.search(None, 'ALL')     for i in list.split():         try:             code, (envelope,) = c.fetch(i, '(ENVELOPE)')             date_str = envelope[len('%s (ENVELOPE ("' % i):].split('"', 1)[0]             d = feedparser._parse_date(date_str)             if not d:                 d = feedparser._parse_date(date_str.split(' ', 1)[1])             try:                 d = date(*d[:3])             except:                 d = date.today()             if d < date.today() - timedelta(jours):                 print i, d, inbox                 c.store(i, '+FLAGS.SILENT', '\\Deleted')         except:             print i, envelope, date_str, date             import traceback             traceback.print_exc()             sys.exit()     c.expunge() c.close() 

Le script est téléchargeable ici

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.

Ce site utilise Akismet pour réduire les indésirables. Découvrez comment les données de vos commentaires sont traitées.